【发布时间】:2019-07-08 00:00:26
【问题描述】:
对 ReactJS 来说相当新。搜索了类似的主题,但无济于事。在我的应用程序上,如果所有字段都有内容,我只想启用我的提交按钮。所有输入字段都绑定到状态。
关于我的 onChange 事件处理函数:
- 我更新绑定到我的字段的状态,从而更新我的输入字段
- 在同一个处理函数中,我声明了一个基于逻辑运算符链的布尔值,每个状态需要一个值,使用 '&&'
- 将 !result 分配给名为“buttonDisabled”的状态
- 然后将此状态分配给按钮的“禁用”属性
- disabled 属性的默认状态是 true
代码
onInputChange = (e) => {
e.preventDefault();
const newValue = e.target.value;
const targetElement = e.target.id;
this.setState(() => {
return {
entryInput: newValue,
[targetElement]: newValue
}
})
this.setState( () => {
let buttonState =
(this.state.symbol &&
this.state.contracts &&
this.state.open);
return {
buttonDisabled: buttonState
}
})
}
在我的按钮元素上:
<Button disabled={this.state.buttonDisabled} onClick={...} ?>
预期结果 - '提交' 被禁用,直到所有状态都包含值(即所有字段都有值)
实际结果 - “提交”被禁用,但在我填写的最后一个文本框的第二个条目上启用。
- 我已经在控制台记录了生成的布尔值,它符合确切的条件
- 按钮启用/禁用似乎是后面的更新
- 认为这可能是 && 返回布尔值/值的方式,我明确使用了与 === '' 的比较和相同的问题。也尝试过 if/else 语句
我可能在这里的某个地方存在逻辑差距,但我已经旋转了一段时间,希望能得到一些帮助。
谢谢
【问题讨论】:
-
之所以落后一个更新,是因为 setState 不会立即更新状态,而是会创建状态转换。我会将这些放在渲染方法中,然后使用它进行比较
标签: javascript reactjs button