我们都知道,有许多的web组件可以被用户的交互发生改变,比如:,
我们都知道,有许多的web组件可以被用户的交互发生改变,比如:,
添加了value 属性的表单组件元素其内部是不会维护自己状态state,组件的value值一旦设置某个具体值就始终是这个值,所以需要调用者来控制组件value的改变。@H_502_3@
这种写法带来一个问题:渲染后的input组件的用户交互,用户输入的任何值将不起作用,input输入框中的值始终为Hello!。这与HTML中input表现不一致。@H_502_3@
为此,为了控制该组件,就需要能能够控制input组件的值,需要借助其内部的状态state,即组件内部要维护一个状态state以便配合input组件的onChange和setState方法来完成对组件的控制;例如对上面形式可以进行封装一个inputItem组件,其内部维护一个state状态,具体代码如下:@H_502_3@
_onChange(evt){
this.setState({
value: evt.target.value
})
}
render(){
return (
<input type="text"
value={this.state.value}
onChange={this._onChange.bind(this)}/>
);
}
}
这样就可以控制react的Input组件了,其实就是需要借助react的有状态component来完成,因为有状态component可以内部维护state。@H_502_3@
非受控组件在底层实现时是在其内部维护了自己的状态state;这样表现出用户输入任何值都能反应到元素上。@H_502_3@
在使用react component时,都会遇到受控组件或者非受控组件;在目前,react组件推荐使用stateless component,但是使用该形式来实现react component时使用非受控组件到倒是没有什么大问题,若是需要控制受控元素就会有出现问题,表现在:@H_502_3@
`受控组件`需要主动维护一个内部state状态的,而`stateless component`是无需维护组件的state状态的,二者有冲突。 所以,受控元素就不能使用stateless component来创建。@H_502_3@
鉴于受控组件与非受控组件的特点,二者应用的地方也有所不同,主要表现在:@H_502_3@
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。@H_502_3@ 原文链接:https://www.f2er.com/js/33762.html