React -- 表单
来源:互联网 发布:形容女人的网络词汇 编辑:程序博客网 时间:2024/05/16 05:03
牢记:在React中,一切数据都是状态。
应用表单组件
1、文本框 input&textarea
mport React, { Component } from 'react';class App extends Component { constructor(props) { super(props); this.handleInputChange = this.handleInputChange.bind(this); this.handleTextareaChange = this.handleTextareaChange.bind(this); this.state = { inputValue: '', textareaValue: '', }; } handleInputChange(e) { this.setState({ inputValue: e.target.value, }); } handleTextareaChange(e) { this.setState({ textareaValue: e.target.value, }); } render() { const { inputValue, textareaValue } = this.state; return ( <div> <p>单行输入框:<input type="text" value={inputValue} onChange={this.handleInputChange} /></p> <p>多行输入框:<textarea value={textareaValue} onChange={this.handleTextareaChange} /></p> </div> ); }}
2、单选按钮和复选按钮
单选按钮核心代码:
class App extends Component { constructor(props) { super(props); this.handeChange = this.handleChange.bind(this); this.state = { radioValue: '',}; } handleChange(e) { this.setState({ radioValue: e.target.value, }); } render() { const { radioValue } = this.state; return ( <div> <p>gender:</p> <label> male: <input type="radio" value="male" checked={radioValue === 'male'} onChange={this.handleChange} /> </label> <label> female: <input type="radio" value="female" checked={radioValue === 'female'} onChange={this.handleChange} /> </label> </div> ); } }
复选按钮很类似,这里不再给出代码。
3、select
可以通过设置select的multiple=true来实现多选下拉列表。
这里仅给出多选select的代码:
import React, { Component } from 'react';class App extends Component { constructor(props) { super(props); this.handleChange = this.handleChange.bind(this); this.state = { area: ['beijing', 'shanghai'], }; } handleChange(e) { const { options } = e.target; const area = Object.keys(options) .filter(i => options[i].selected === true) .map(i => options[i].value); this.setState({ area,}); } render() { const { area } = this.state; return ( <select multiple={true} value={area} onChange={this.handleChange}> <option value="beijing">北京</option> <option value="shanghai">上海</option> <option value="hangzhou">杭州</option> </select> ); } }
受控组件
上面的几个示例中,每当表单的值发生变化的时候,该值就会被写入到组件的state中。这样的组件在React中被称为受控组件。
在受控组件中,组件状态和它的value或者checked相对应。
React推荐使用受控的表单组件。下面总结下React受控组件更新state的流程:
1、可以通过在constructor中设置state作为表单的默认值
2、每当表单的值发生变化的时候,调用onChange事件处理器
3、事件处理器通过合成事件对象e拿到改变后的状态,并更新state
4、setState会触发视图的重新渲染,完成表单组件的更新
双向的数据绑定:表单的数据源于组件state,并通过props传入;之后,又通过onChange事件处理器将新的表单数据写回道组件的state,完成了数据的双向绑定。
非受控组件
如果一个表单组件没有value props(对于单选/复选按钮对应的是checked prop)时,就称为非受控组件。
开发者可以使用defaultValue和defaultChecked 来表示组件的默认值,但是它只会被渲染一次,在后续的渲染时并不起作用:
受控组件:<input value={this.state.value} onChange={e => { this.setState({ value: e.target.value.toUpperCase() }) }}/>
非受控组件<input defaultValue={this.state.value} onChange={e => { this.setState({ value: e.target.value.toUpperCase() }) }}/>
在上面两个示例中:受控组件可以将用户输入转化为大写后显示,非受控组件则不会起作用。需要注意:如果不对受控组件绑定change事件,那么在文本框内输入任何值都不会被显示在屏幕上。
非受控组件和受控组件最大的区别就是:非受控组件的状态并不会受应用状态的控制,而受控组件的值来自于组件的state。
表单组件的几个重要属性
状态属性
value, checked, selected(不推荐将select属性用语option上,而推荐在select上使用value的方式)
事件属性
例如 onChange 事件,实际上,React支持DOM Level3中定义的所有表单事件。
- React表单
- React -- 表单
- react-表单
- React表单
- react表单
- React 互动表单
- 6、React中的表单
- React-表单详解
- React的表单组件
- React-表单详解
- React表单组建
- React.js中的表单
- react操作表单
- React表单详解
- React生成表单input
- React(9)--表单
- react实现表单组件
- React中的表单组件
- 一个java购物车模型
- Windows7(64)+anaconda2(python2.7)安装pybrain包详细步骤
- 飞机大战(四)
- ###########有用**********如何选择优化器 optimizer
- shell工具篇之grep
- React -- 表单
- RxJava2详解(二)--操作符
- Muduo 网络库源码分析 之 关键技术点总结
- MFC中一个小技巧---获取窗口所有的同类控件
- Oracle ORA-01033: ORACLE initialization or shutdown in progress 错误解决办法
- POJ 1813 Overlapped Shapes 笔记
- NLTK学习笔记(八):文法--词关系研究的工具
- hadoop上hive安装配置及报错处理
- 分布式缓存负载均衡负载均衡的缓存处理:虚拟节点对一致性hash的改进