一、不可控组件

 <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. (转)C++实现RTMP协议发送H.264编码及AAC编码的音视频,摄像头直播

    转:http://www.cnblogs.com/haibindev/archive/2011/12/29/2305712.html C++实现RTMP协议发送H.264编码及AAC编码的音视频 RT ...

  2. 牛客多校第八场 G Gemstones 栈/贪心

    题意: 对于一个序列,把可以把连着三个相同的字母拿走,问最多拿走多少组. 题解: 直接模拟栈,三个栈顶元素相同则答案+1,并弹出栈 #include<bits/stdc++.h> usin ...

  3. nutch集成solr和中文分词

    nutch集成solr和中文分词 一.构建nutch环境 1. 设置代理 由于nutch使用ant构建,ant调用ivy,会从maven仓库中下载依赖包,因此若公司需要代理才能上网,需要设置代理,如果 ...

  4. (转)linux下装tomcat

    转载于:http://www.linuxidc.com/Linux/2016-11/136959.htm (linux社区) 1 tomcat介绍 Tomcat 是由 Apache Foundatio ...

  5. Servlet接口的抽象方法实现

    1.init:初始化方法,在Servlet被创建时执行,只会执行一次2.service:提供服务,每此Servelet被访问时service都会执行3.destroy:销毁方法,在服务器正常关闭时执行 ...

  6. Activiti学习笔记8 — UserTask私有任务的使用

    每一个UserTask都会在Execution表和Task表中各产生一条记录 一.创建流程引擎对象 /** * 1.创建流程引擎对象 */ private ProcessEngine processE ...

  7. Git创建本地库过程

  8. 2019-7-29-C#-在基类定义好方法让子类继承接口就能实现

    title author date CreateTime categories C# 在基类定义好方法让子类继承接口就能实现 lindexi 2019-07-29 09:57:49 +0800 201 ...

  9. ubuntu卸载node和npm

    sudo apt-get remove --purge npm sudo apt-get remove --purge nodejs sudo apt-get remove --purge nodej ...

  10. springboot mail 发送邮件

    新开发了一个新的功能,要求使用java发送邮件,在此记录下代码,以方便后来者: 1.首先需要开通邮箱,开通smtp功能,我这边使用的是新浪邮箱,试过163.qq,比较麻烦,后来看到别人使用新浪,直接使 ...