【发布时间】:2022-01-13 16:34:40
【问题描述】:
请注意,这个问题不是异步更新问题(至少,我不认为它是)。
我有一个 class 组件,其内容如下(为了解决问题而进行了高度简化):
constructor(props) {
super(props);
this.state = {
aSelected: false;
bSelected: false
}
}
handleCheckboxChange = (e) => {
const { checked, value } = e.target;
console.log( 'checked: ', checked );
if(value=="a") {
this.setState( {aSelected: checked}, () => {
console.log('aSelected: ', this.state.aSelected);
console.log("---")
});
}
if(value=="b") {
this.setState( {bSelected: checked}, () => {
console.log('bSelected: ', this.state.bSelected);
console.log("---")
});
}
}
在渲染返回的某个地方,我有这个:
<input>
type="checkbox"
value="a"
onChange={this.handleCheckboxChange}
checked={this.state.aSelected}
disabled={ (this.state.aSelected || (!this.state.aSelected && !this.state.bSelected) ) ? false : true}
</input>
<input>
type="checkbox"
value="b"
onChange={this.handleCheckboxChange}
checked={this.state.bSelected}
disabled={ (this.state.bSelected || (!this.state.aSelected && !this.state.bSelected) ) ? false : true}
</input>
这是在 Chrome 开发者工具中记录的输出。如您所见,每次我选择和取消选择复选框时,都会适当地切换“选中”。但是,“selected”(应该说“aSelected”)的状态永远不会改变,并且始终具有初始状态值 false。有人知道为什么“selected”(应该说“aSelected”)的值永远不会改变吗?
编辑:我的目标是创建两个复选框项目,用户只能选择一个或选择无。当一个被选中时,另一个应该禁用。
【问题讨论】:
-
input元素似乎没有使用组件状态中的selected属性 -
@siddmuk2005 我不是要更改道具值。
-
@byxor 我只提供了与问题相关的内容。我在询问记录的输出“选择”与切换“检查”值不匹配。
-
disabled={!aSelected}disabled={!bSelected}将导致每个输入元素使用组件中的状态。那里的布尔逻辑可能会发生一些时髦的事情,不是 100% 确定的。也不是 100% 确定disabled是否是实现此目的的正确属性(在输入元素上)。其他人可以填写详细信息
标签: javascript reactjs class state