一、不可控组件

 <input type="text" defaultvalue="Hello React" />

如上:defaultvalue的值是固定的,这就是一个不可控组件

如果要获取input的value值,只有使用ref获取节点来获取值

二、可控组件

 <input type="text" defaultvalue={this.state.value} />

如上:defaultvalue的值是根据状态确定的,只需要拿到this.state.value的值就可以了,

这里需要注意一下:使用value的值是不可以修改的,defaultValue的值是可以修改的

三、可控组件的优点

1、符合React的数据流

2、数据存储在state中,便于获取

3、便于处理数据

 import React from 'react';
import ReactDOM from 'react-dom'; // 不可控组建,要是使用refs属性对DOM节点进行操作
class UnControll extends React.Component {
submitData = (e)=> {
var userInput1 = ReactDOM.findDOMNode(this.refs.userInput1).value;
var userInput2 = ReactDOM.findDOMNode(this.refs.userInput2).value;
alert(userInput1);
alert(userInput2)
e.preventDefault();
}
render(){
return (
<form onSubmit={this.submitData}>
{/*
在表单中,使用value是无法改变的,需要使用defaultValue
checked与defaultChecked同上
*/}
<input
type="text"
value="不可控组件"
ref="userInput1"
/>
<input
type="text"
defaultValue="不可控组件"
ref="userInput2"
/>
<button>提交</button>
</form>
)
}
} // 可控组建,不需要对DOM进行操作
class Controll extends React.Component {
state = { value:'可控组件' }
submitData = (e)=> {
alert(this.state.value);
e.preventDefault();
}
handleChange = (e)=>{
this.setState({
value:e.target.value
})
}
render() {
return (
<form onSubmit={this.submitData}>
<input
type="text"
defaultValue={this.state.value}
onChange={this.handleChange}
/>
<button>提交</button>
</form>
);
}
} export default Controll;

react之可控组件与不可控组件的更多相关文章

  1. React受控组件和非受控组件

    受控组件和非受控组件主要是用来解决表单组件状态谁来控制的问题.因为用户的输入会反应在界面上,相当于视图的状态发生了变化,而react是通过虚拟DOM比对修改视图的,这里就要决定谁来控制表单组件的状态. ...

  2. React Native填坑之旅--Stateless组件

    Stateless component也叫无状态组件.有三种方法可以创建无状态组件. 坑 一般一个组件是怎么定义的: 很久以前的方法: const Heading = createClass({ re ...

  3. 基于React Native的Material Design风格的组件库 MRN

    基于React Native的Material Design风格的组件库.(为了平台统一体验,目前只打算支持安卓) 官方网站 http://mrn.js.org/ Github https://git ...

  4. 【react】利用prop-types第三方库对组件的props中的变量进行类型检测

    1.引言--JavaScript就是一个熊孩子   1.1对于JSer们来说,js是自由的,但同时又有许多让人烦恼的地方.javascript很多时候就是这么一个熊孩子,他很多时候并不会像C和java ...

  5. 5. React 组件的协同使用 组件嵌套和Mixin

            组件是React的核心,构建大型项目时多个组件之间需要进行协同使用.可以从横向和纵向两个角度来实现组件的协同使用,纵向的协同使用就是组件嵌套,横向的协同使用就是Mixin(抽取公共方法 ...

  6. React:受控组件与非受控组件混用实战 - 译文

    原文链接:React: hybrid controlled components in action 受控组件 非受控组件 混用受控组件和非受控组件 原则一 原则二 原则三 原则四 实施方案 总结 F ...

  7. react初探(二)之父子组件通信、封装公共组件

    一.前言 在组件方面react和Vue一样的,核心思想玩的就是组件,下面举两个组件常用的情景. 场景一:假如我们现在有一个页面包含表格以及多个弹框,这种时候如果将这个页面的业务代码写在一个组件中,那么 ...

  8. 三大前端框架(react、vue、angular2+)父子组件通信总结

    公司业务需要,react.vue.angular都有接触[\无奈脸].虽然说可以拓展知识广度,但是在深度上很让人头疼.最近没事的时候回忆各框架父子组件通信,发现很模糊,于是乎稍微做了一下功课,记录于此 ...

  9. React中嵌套组件与被嵌套组件的通信

    前言 在React项目的开发中经常会遇到这样一个场景:嵌套组件与被嵌套组件的通信. 比如Tab组件啊,或者下拉框组件. 场景 这里应用一个最简单的Tab组件来呈现这个场景. import React, ...

随机推荐

  1. 李宏毅机器学习课程---2、Regression - Case Study

    李宏毅机器学习课程---2.Regression - Case Study 一.总结 一句话总结: 分类讨论可能是比较好的找最佳函数的方法:如果 有这样的因素存在的话 模型不够好,可能是因素没有找全 ...

  2. DLL注入技术之劫持进程创建注入

    劫持进程创建注入原理是利用Windows系统中CreateProcess()这个API创建一个进程,并将第6个参数设为CREATE_SUSPENDED,进而创建一个挂起状态的进程,利用这个进程状态进行 ...

  3. Java-Class-@I:org.apache.ibatis.annotations.Mapper

    ylbtech-Java-Class-@I:org.apache.ibatis.annotations.Mapper 1.返回顶部   2.返回顶部 1. package com.ylbtech.ed ...

  4. 剑指offer——36二叉树和为某一值的路径

    题目描述 输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径.(注意: 在返回值的list中,数组长度大 ...

  5. [CERC2017]Gambling Guide

    题目 看起来非常随机游走,但是由于我们可以停在原地,所以变得不是非常一样 设\(f_x\)表示从\(x\)到\(n\)的期望距离 如果我们提前知道了\(f\),那么我们随机到了一张到\(y\)的车票, ...

  6. oracle union 和 union all

    java.sql.SQLSyntaxErrorException: ORA-01789: 查询块具有不正确的结果列数 原因: 发现是sql语句用union时的 两个语句查询的字段不一致 解决:将 2个 ...

  7. 2018Github用户kamranahmedse分享的开发路线

    下面四张图是Github用户kamranahmedse分享的,主要是web前端开发.后端开发以及DevOps开发的路线图,涉及的点还是很全面的,如果你对这部分有兴趣,并且希望有所作为,以下这几张路线图 ...

  8. JVM基本知识总结

    大概两三个月之前阅读了<深入理解Java虚拟机>(周志明著),也为了加深印象,这里简单的做下总结,想完整点了解JVM知识的也可以阅读本书,书写的不错,相当通俗易懂. 第一部分 内存管理机制 ...

  9. shell 基本系统命令,关机重启,查看版本,查手册,日期,磁盘,历史命令

    1. 查看系统版本及内核版本 cat /etc/issue  查看系统版本 uname -r     查看内核版本 2. 关机重启命令 关机: shutdown -h now    立即关机 shut ...

  10. 前端常用的库和实用技术之JavaScript高级技巧

    javascript高级技巧 变量作用域和闭包 <!DOCTYPE html> <html lang="en"> <head> <meta ...