Reactjs 事件处理程序中带有[name]的PrevState
我有两个复选框,我只想与一个事件处理程序一起使用。我怎样才能做到这一点Reactjs 事件处理程序中带有[name]的PrevState,reactjs,Reactjs,我有两个复选框,我只想与一个事件处理程序一起使用。我怎样才能做到这一点 handleChange = e => { if (e.target.type === "checkbox") { return this.setState(prevState => ({ [e.target.name]: ![prevState.e.target.name] })); } } 编辑: 我正在尝试此操作,但一旦选中复选框,它将不会恢复复选
handleChange = e => {
if (e.target.type === "checkbox") {
return this.setState(prevState => ({
[e.target.name]: ![prevState.e.target.name]
}));
}
}
编辑:
我正在尝试此操作,但一旦选中复选框,它将不会恢复复选框:
if (e.target.type === "checkbox") { this.setState(prevState => ({ [name]: !prevState[name] })); }
现在还不太清楚你想要实现什么。由于您使用的是复选框,我猜您只是在尝试保存复选框是否选中 在这种情况下,我们可以使用setState的合并语法,并将目标的
选中值分配给它的名称
:
handleChange = e => {
if (e.target.type === "checkbox") {
this.setState({ [e.target.name]: e.target.checked });
}
}
虽然这不是您的问题,但我仍想指出有关使用setState的两件事:
setState没有返回值
使用setState的功能版本时,您将不会收到以前的状态
,而是当前状态
现在还不太清楚你想要实现什么。由于您使用的是复选框,我猜您只是在尝试保存复选框是否选中
在这种情况下,我们可以使用setState的合并语法,并将目标的选中值分配给它的名称
:
handleChange = e => {
if (e.target.type === "checkbox") {
this.setState({ [e.target.name]: e.target.checked });
}
}
虽然这不是您的问题,但我仍想指出有关使用setState的两件事:
setState没有返回值
使用setState的功能版本时,您将不会收到以前的状态
,而是当前状态
你的州是如何组织的。。。?请参阅,假设e.target.name
解析为foo
。prevState
中的状态将是{foo:false}
[prevState.e.target.name]
将无法正确解析,因为您没有{e:{target:{name:'foo'}}}
作为prevState
。我想你的意思是!prevState[e.target.name]
如果您试图反转状态中各个输入值的前一个值。我正在尝试此操作,但选中后不会取消选中:if(e.target.type==“checkbox”){this.setState(prevState=>({[name]:!prevState[name]});}您的状态结构如何。。。?请参阅,假设e.target.name
解析为foo
。prevState
中的状态将是{foo:false}
[prevState.e.target.name]
将无法正确解析,因为您没有{e:{target:{name:'foo'}}}
作为prevState
。我想你的意思是!prevState[e.target.name]
如果您试图反转状态中各个输入值的上一个值。我正在尝试此操作,但选中后不会取消选中:if(e.target.type==“checkbox”){this.setState(prevState=>({[name]:!prevState[name]});}这确实有效,签出此小示例:。如果这对你不起作用,你的问题可能在其他地方。在这种情况下,请提供其他代码。这确实有效,请检查以下小示例:。如果这对你不起作用,你的问题可能在其他地方。在这种情况下,请提供其他代码。