React中受控与非受控组件
受控组件<input type="text" value={this.state.value} onChange={(e) => { this.setState({ value: e.target.value.toUpperCase(),}); }} />
非受控组件
import React,{ Component } from 'react'; class UnControlled extends Component { handleSubmit = (e) => { console.log(e); e.preventDefault(); console.log(this.name.value); } render() { return ( <form onSubmit={this.handleSubmit}> <input type="text" ref={i => this.name = i} defaultValue="BeiJing" /> <button type="submit">Submit</button> </form> ); } } export default UnControlled; 对比受控组件和非受控组件将输入的字母转化为大写展示 <input type="text" value={this.state.value} onChange={(e) => { this.setState({ value: e.target.value.toUpperCase(),}); }} /> 直接展示输入的字母 <input type="text" defaultValue={this.state.value} onChange={(e) => { this.setState({ value: e.target.value.toUpperCase(),}); }} /> 1.性能上的问题在受控组件中,每次表单的值发生变化,都会调用一次onChange事件处理器,这确实会带来性能上的的损耗,虽然使用费受控组件不会出现这些问题,但仍然不提倡使用非受控组件,这个问题可以通过Flux/Redux应用架构等方式来达到统一组件状态的目的. 2.是否需要事件绑定使用受控组件需要为每一个组件绑定一个change事件,并且定义一个事件处理器来同步表单值和组件的状态,这是一个必要条件.当然,某些情况可以使用一个事件处理器来处理多个表单域 import React,{ Component } from 'react'; class Controlled extends Component { constructor(...args) { super(...args); this.state = { name: 'xingxing',age: 18,}; } handleChange = (name,e) => { const { value } = e.target; this.setState({ [name]: value,}); } render() { const { name,age } = this.state; return ( <div> <input type="text" value={name} onChange={this.handleChange.bind(this,'name')} /> <input type="text" value={age} onChange={this.handleChange.bind(this,'age',)} /> </div> ); } } export default Controlled; 表单组件的几个重要属性1.状态属性React的form组件提供了几个重要的属性,用来显示组件的状态
2.事件属性当状态属性改变时会触发onChange事件属性.受控组件中的change事件与HTML DOM中提供的input事件更为类似; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |