使用复选框通过 React 动态更新状态
Updating State dynamically with React using Checkboxes
我有一个名为 Animal 的复选框。选中该复选框后,this.state.Animal 设置为 true 并显示动物过滤器 div。
<input type="checkbox" checked={this.state.Animal} onChange={this.checkAnimal} /> Animals
{this.state.Animal ?
<div className="animal-filter">
<div className="checkbox">
<p><input type="checkbox" checked={this.state.dog} onChange={this.checkdog} /> AA </p>
</div>
<div className="checkbox">
<p><input type="checkbox" checked={this.state.cat} onChange={this.checkcat} /> A</p>
</div>
<div className="checkbox">
<p><input type="checkbox" checked={this.state.fish} onChange={this.checkfish} /> B</p>
</div>
</div> : null}
我的问题是,一旦动物状态设置为真,我希望猫、狗和鱼的这些复选框立即设置为真。我知道 react setState 不会自动更新状态,所以我该如何做到这一点,当动物复选框为 "checked" 时,其他复选框设置为 true 反之亦然?
我更新状态的代码:
checkAnimal(){
this.setState({animal: !this.state.animal});
if (this.state.animal !=true){
this.setState({
cat:false,
dog:false,
fish:false,
});
}else{
this.setState({
cat:true,
dog:true,
fish:true,
});
}
}
checkAnimal
方法可以大大简化为
checkAnimal() {
this.setState({
animal: !this.state.animal,
cat: !this.state.animal,
dog: !this.state.animal,
fish: !this.state.animal,
});
}
这将保证当动物复选框被选中时,猫、狗和鱼复选框将与其状态保持同步。
此外,在 jsx 中引用了带有大写字母 A
的 this.state.Animal
,这与 this.state.animal
不兼容,因为它是在 checkAnimal
方法中访问的。
例如{this.state.Animal ?
所以要小心。
考虑使用像 eslint 这样的 JavaScript 代码 linter 来捕获这样的错误。
我有一个名为 Animal 的复选框。选中该复选框后,this.state.Animal 设置为 true 并显示动物过滤器 div。
<input type="checkbox" checked={this.state.Animal} onChange={this.checkAnimal} /> Animals
{this.state.Animal ?
<div className="animal-filter">
<div className="checkbox">
<p><input type="checkbox" checked={this.state.dog} onChange={this.checkdog} /> AA </p>
</div>
<div className="checkbox">
<p><input type="checkbox" checked={this.state.cat} onChange={this.checkcat} /> A</p>
</div>
<div className="checkbox">
<p><input type="checkbox" checked={this.state.fish} onChange={this.checkfish} /> B</p>
</div>
</div> : null}
我的问题是,一旦动物状态设置为真,我希望猫、狗和鱼的这些复选框立即设置为真。我知道 react setState 不会自动更新状态,所以我该如何做到这一点,当动物复选框为 "checked" 时,其他复选框设置为 true 反之亦然?
我更新状态的代码:
checkAnimal(){
this.setState({animal: !this.state.animal});
if (this.state.animal !=true){
this.setState({
cat:false,
dog:false,
fish:false,
});
}else{
this.setState({
cat:true,
dog:true,
fish:true,
});
}
}
checkAnimal
方法可以大大简化为
checkAnimal() {
this.setState({
animal: !this.state.animal,
cat: !this.state.animal,
dog: !this.state.animal,
fish: !this.state.animal,
});
}
这将保证当动物复选框被选中时,猫、狗和鱼复选框将与其状态保持同步。
此外,在 jsx 中引用了带有大写字母 A
的 this.state.Animal
,这与 this.state.animal
不兼容,因为它是在 checkAnimal
方法中访问的。
例如{this.state.Animal ?
所以要小心。
考虑使用像 eslint 这样的 JavaScript 代码 linter 来捕获这样的错误。