作者:潇洒D-An_na | 来源:互联网 | 2023-02-05 12:14
如何解决《不要直接改变状态,在ReactJS中使用setState()react/no-direct-mutation-state》经验,为你挑选了1个好方法。
1> Mayank Shukl..:
获取"不要直接改变状态,使用setState()",为什么?
因为,您正在改变ref回调方法中的状态值来存储节点ref,在这里:
this.state.name = input;
解:
不要使用状态变量来存储引用,您可以直接将它们存储在组件实例中,因为它不会随时间而变化.
根据DOC:
状态包含特定于此组件的数据,该数据可能随时间而变化.状态是用户定义的,它应该是一个普通的Javascript对象.
如果你不在render()中使用它,它不应该处于状态.例如,您可以将计时器ID直接放在实例上.
由于您使用受控输入元素,因此不需要ref.直接使用this.state.name
input元素值属性并this.state.name
访问该值.
用这个:
如果你想使用ref
然后将ref直接存储在实例上,删除value属性,你也可以删除该onChange
事件,使用它如下:
this.el = el}
defaultValue={this.props.str.name}
name="name"
type="text"
className="form-control"
/>
现在用它ref
来访问这样的值:
this.el.value