javascript - Semantic-UI React Checkbox 状态不起作用
问题描述
我有一个父容器,它调用基于类的反应组件子项(因为语义 UI 反应文档都是用基于类的组件编写的)。子组件有一个Form.Field
:
<Form.Field
control={Checkbox}
label={{children: 'cardreader'}}
checked = {this.state.cardReaderChecked}
onChange={this.cardReaderToggleHandler}
/>
我有一个state
:
state = {
cardReaderChecked: false,
}
和一个cardReaderToggleHandler
:
cardReaderToggleHandler = () => {
console.log(this.state.cardReaderChecked);
this.setState((prevState, props) => ({
cardReaderChecked : !prevState.cardReaderChecked
}))
console.log(this.state.cardReaderChecked);
}
我试过切换,this.state.cardReaderChecked
但我发现很多参考和文档都推荐这种方法,prevState
以避免状态更新的延迟。
但是,必须存在逻辑错误,因为它不起作用。如果我刷新页面,checkbox
则清除为this.state.cardReaderChecked
.
我第一次单击checkbox
它时,它会带有勾号,并且我的this.state.cardReaderChecked
更新是true
(根据我在 Chrome 中值得信赖的 React 工具)。但是,两个console.log
打印输出都给了我一个false
,如果我将我的state
回传给父表单,它也表明该复选框是错误的。
每次后续单击都会切换,但勾选checkbox
显示true
状态但将 a 传递false
给父表单(即console.log
当前所在的位置),反之亦然,未勾选checkbox
传递回 a true
。
我几乎想not
从prev.state
中删除setState
,但我更愿意了解为什么会发生这种情况。
额外问题:如何查询功能组件中的checkbox
状态?checked
解决方案
将函数作为道具传递给孩子
class Parent extends Component {
state = {
cardReaderChecked: false,
}
cardReaderToggleHandler = () => {
this.setState((prevState, props) => ({
cardReaderChecked : !prevState.cardReaderChecked
}), () => console.log(this.state.cardReaderChecked))
}
....
render () {
return (
....
<Form.Field
control={Checkbox}
label={{children: 'cardreader'}}
checked = {this.state.cardReaderChecked}
onChange={this.cardReaderToggleHandler}
/>
)
}
推荐阅读
- php - Wordpress admin-ajax 不适用于来自其他国家/地区的 VPN/访问
- c# - 指定 .runsettings 文件时无法使用 vstest.console.exe - MS 测试
- android - 在 Android 中使用 Buttons 和 FragmentManager
- node.js - 检查二进制数据文件类型是否为PDF?
- laravel - Laravel Eloquent Accessor 奇怪的问题
- javascript - gulp-webpack 错误:找不到入口模块:错误:无法解析模块
- c# - 面临在 EF Core 和导航属性中排序的问题
- go - 在 Go 中使用 color.RGBA 结构类型创建新颜色时,我收到错误提示整数格式错误
- spring - 能
内部决策状态被多次调用? - android - InputMethodService 或任何后台服务是否可以监听其他应用程序的输入事件,例如 Android 中的键盘?