复选框值在 setState 中反转

Posted

技术标签:

【中文标题】复选框值在 setState 中反转【英文标题】:Checkbox value reversed in setState 【发布时间】:2019-09-27 11:38:25 【问题描述】:

我需要根据checkbox改变一个组件的状态,有个奇怪的问题,setState中的值是event.target.checked的值的倒数。

根据上面的代码:

如果 .target.checked === true => this.setState set [event.target.id]: false

如果.target.checked === false => this.setState set [event.target.id]: true

handleChange(event) 
    if ( event.target.getAttribute('type') == "text")
        this.setState( [event.target.id]: event.target.value );
    else if ( event.target.getAttribute('type') == "checkbox") 
        this.setState( [event.target.id]: event.target.checked );
    

【问题讨论】:

【参考方案1】:

只需将前缀! 添加到event.target.checked 即可反转其值

this.setState( [event.target.id]: !event.target.checked );

【讨论】:

【参考方案2】:

您应该使用与先前值相反的值。试试这个

handleChange(event) 
    if ( event.target.getAttribute('type') == "text")
        this.setState( [event.target.id]: event.target.value );
    else if ( event.target.getAttribute('type') == "checkbox") 
        this.setState( [event.target.id]: !event.target.checked );
    

我在 event.target.checked 之前添加了一个感叹号,表示“不是”之前的值。

【讨论】:

【参考方案3】:

已解决,问题在于 setState 的异步性质,现在我使用带有回调的新状态,一切正常。

this.setState( [fieldId]: fieldValue , () =>  console.log(this.state);  

【讨论】:

以上是关于复选框值在 setState 中反转的主要内容,如果未能解决你的问题,请参考以下文章

根据数据表值在gridview中设置复选框

复选框值在 false 时不绑定到对象?

如何使用布尔值在 ant design 复选框中呈现默认值?

表值在反应中没有变化

根据最初检查的复选框值在后退按钮单击时重新加载 Angular 6 反应式表单

双重微调值,双复选框值,编辑文本值在提交按钮时插入到sqlite