[英]ReactJS setState to blank object not working
我有这样的状态
state = {
params: {}
}
假设我们通过this.setState({params:{data:2}})
设置参数,然后当我们想恢复到其初始状态时,调用this.setState({params:{}})
。 状态已还原,但问题在于视图仍呈现2(this.state.params.data的值)。 工作的唯一方法是调用this.setState({params:{data:''}})
。 想象一下,如果我们有很多领域,我们不会那样做。 有什么解决办法吗?
代码和框的链接在这里
您可以通过对value属性使用三元运算符来解决此问题。 查看工作的沙箱: https : //codesandbox.io/s/blissful-clarke-l2pif
<Input
value={params["data"] ? params["data"] : ""}
onChange={(e, { value }) => {
this.buildParams("data", value);
}}
/>
这将起作用,因为它强制语义ui标签有条件地检查我们状态中的值,而不是使用诸如params.data
类的静态绑定。 如果对象中有data
属性,那么我们将使用它的值。 如果不是,则显示一个空字符串。
输入所使用的值始终受到控制,并且在将params
恢复为{}
时不会保留。 我假设您可以使用与每个输入相对应的特定name
或key
交换数据。
调用this.setState({params:{}})
会将params
设置为状态上的空对象。 要验证您可以在回调中记录新状态:
this.setState({params:{}}, () => console.log(this.state)) // {params: {}}
编辑:查看更新的问题,您遇到的问题是您的状态通过this.state.params.data
连接到输入。 在这种情况下,将状态params
设置为空对象时,input的值将设置为undefined
并且会收到警告: A component is changing a controlled input of type text to be uncontrolled.
在这种情况下,您的默认状态必须如下所示:
this.state = {
params: {data: ''}
}
和重置方法:
revertState = () => {
this.setState({
params: {data: ''}
});
};
另外,您可以通过删除value
属性来使输入不受控制,但是在这种情况下,您将无法直接对其进行修改。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.