Javascript 为什么状态值更改时未禁用按钮(ReactJS)
我试图在输入等于0时禁用按钮。开始时,按钮被禁用,但当我尝试增加输入>0并将输入减少回0时,按钮不会被禁用Javascript 为什么状态值更改时未禁用按钮(ReactJS),javascript,reactjs,Javascript,Reactjs,我试图在输入等于0时禁用按钮。开始时,按钮被禁用,但当我尝试增加输入>0并将输入减少回0时,按钮不会被禁用 constructor() { super(); this.state = { number: 0, }; } onInputChange = (e) => { this.setState({ number: e.target.value }); }; render() { const { number} = this.
constructor() {
super();
this.state = {
number: 0,
};
}
onInputChange = (e) => {
this.setState({ number: e.target.value });
};
render() {
const { number} = this.state;
return (
<Fragment>
<input
value={number}
type="number"
max="100"
min="0"
onChange={this.onInputChange}
></input>
<Button
style={{ display: "block" }}
disabled={number === 0 ? true : false}
>
Print
</Button>
有人能向我解释为什么状态改变了,但禁用属性不起作用吗?如果我将条件设置为:
<Button
style={{ display: "block" }}
disabled={number < 1 ? true : false}
>
那么代码就可以正常工作了。但我真的想知道为什么我的第一种方法不起作用。
谢谢。这可能是由于变量类型造成的。强制打字。示例:+'0'获取0
您可以尝试编写为:disabled={+number?true:false}这可能是由于变量类型造成的。强制打字。示例:+'0'获取0
您可以尝试编写为:disabled={+number?true:false}从e.target.value返回的值类型是string,您应该使用类似parseint的方法将string转换为int伟大的答案,谢谢!因为我使用的是===,所以类型必须相同。这就是它不起作用的原因。从e.target.value返回的值的类型是string,您应该使用类似parseint的方法将string转换为int。非常好的答案,谢谢!因为我使用的是===,所以类型必须相同。这就是为什么它不起作用。这是绝对正确的,我的错误是使用了严格的比较。谢谢你的详细解释。这是绝对正确的,我的错误是使用了严格的比较。感谢您的详细解释。感谢简洁的解决方案,我使用严格比较的错误。感谢简洁的解决方案,我使用严格比较的错误。
disabled={ "0" === 0} // Returns false
disabled={ "0" == 0} // Returns true
onInputChange = (e) => {
this.setState({ number: parseInt(e.target.value) });
};