受控组件与费受控组件

受控组件就是为某个form表单组件添加value属性。
形式如下:

	render:function(){
		return <input type="text" value="Hello!" />
	}

添加了value属性的表单组件元素其内部是不会维护自己状态state,组件的value值一旦设置某个具体值就始终是这个值,所以需要调用者来控制组件value的改变。
这种写法会带来一个问题:渲染后input组建的用户交互,用户输入的任何值将不起作用,input输入框中的值始终为Hello!这与input表现不一致。
为此,为了控制该组件,就需要能够控制input组件的值,需要借助其内部的状态state,即组件内部要维护一个状态state以便于配合input组建的onChangesetState方法来完成对组建的控制;例如对上面形式可以进行封装一个inputItem组件,其内部维护一个state状态,具体代码如下:

	export default class InputItem extends React.Component{
	    constructor(props){
	        super(props);
	        this.state = {
	            value: ""
	        }
	    }
	
	    componentWillReceiveProps(nextProps){
	        this.setState({
	            value: nextProps.value
	        })
	    }
	
	    _onChange(evt){
	        this.setState({
	            value: evt.target.value
	        })
	    }
	
	    render(){
	        return (
	            <input type="text" 
	                value={this.state.value} 
	                onChange={this._onChange.bind(this)}/>
	        );
	    }
	}

这样就可以在外部调用组件了:

	<InputItem value="this.state.userName" />		

这样就可以控制react的input组件了,其实就是需要借助react的有状态component来完成,因为有状态component可以内部维护state
非受控组件表现形式上,react中没有添加value属性的表单组件元素就是非受控组件。表现形式如下:

 <input type="text" />

非抽空组件再底层实现时实在其内部维护了自己的状态state,这样表现出用户输入任何职都能反映到
元素上。

总结

在使用react component时,都会遇到受控组件或者非受控组件;在目前,react组件推荐使用stateless component,但是使用该形式来实现react component时使用非受控组件到倒是没有什么大问题,若是需要控制受控元素就会有出现问题,表现在:

`受控组件`需要主动维护一个内部state状态的,而`stateless component`是无需维护组件的state状态的,二者有冲突。

所以,受控元素就不能使用stateless component来创建。

鉴于受控组件与非受控组件的特点,二者应用的地方也有所不同,主要表现在:

受控元素,一般用在需要动态设置其初始值的情况;例如某些form表单信息编辑时,input表单元素需要初始显示服务器返回的某个值然后进行编辑。

非受控元素, 一般用于无任何动态初始值信息的情况; 例如form表单创建信息时,input表单元素都没有初始值,需要用户输入的情况

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值