javascript - 在 React 中使用无线电的正确方法是什么?一旦选中,按钮就会被冻结
问题描述
我正在使用状态来控制我的组件,并且我不确定以下代码的哪一部分导致代码按钮在检查后冻结。这是构造函数:
constructor(props) {
super(props);
this.state = {
firstName: '',
inPerson: false,
onlineMedium: true,
};
}
这个函数应该处理变化:
handleFormChange = (event) => {
const target = event.target;
if (target.name === "inPerson" || target.name === "onlineMedium") {
const value = !this.state[target.name]
const name = target.name;
this.setState({
[name]: value
});
}
else {
const value = target.value;
const name = target.name;
this.setState({
[name]: value
});
}
}
这将呈现组件:
render() {
return (
<>
<label className="tutor-add-label">
First name
<input
className="tutor-add-input"
type="text"
name="firstName"
value={this.state.firstName}
onChange={this.handleFormChange}
/>
</label>
<div className="medium">
<input
type="radio"
id="online"
name="onlineMedium"
checked={this.state.onlineMedium}
onChange={this.handleFormChange}
/>
<label htmlFor="online">online</label>
<input
type="radio"
id="person"
name="inPerson"
checked={this.state.inPerson}
onChange={this.handleFormChange}
/>
<label htmlFor="person">In person</label>
</div>
</>
)
}
编辑:根据下面的评论,如果有另一种选择/取消选择效果更好的收音机的方法,请告诉我。我正在关注这个http://react.tips/radio-buttons-in-react-16/
更新:由于某种原因,似乎没有发生点击(在第一次点击之后)。这似乎指向任何方向?
解决方案
这对我有用:
将事件处理程序从 更改onChange
为onClick
并使用以下内容来控制状态:
if (target.name === "onlineMedium" || target.name === "inPerson") {
if (event.target.checked && !this.state[target.name]) {
this.setState({
[target.name]: true,
})
}
else if (event.target.checked && this.state[target.name]) {
this.setState({
[target.name]: false,
})
}
}
信用:它的灵感来自这个答案:https ://stackoverflow.com/a/57147343/10813256
推荐阅读
- c# - 更改存储为 MongoDB 文档中的字符串的枚举值
- android - 使用 Gradle Kotlin-DSL 时如何使用 flavorDimensions 为每种风味组合设置不同的 applicationId?
- python - 不使用 open(filename, 'wb') 保存泡菜文件
- xamarin.forms - 单击 Xamarin Forms SearchBar 时显示搜索选项
- python - numpy 是否处理 dtype 错误的数组?
- r - 错误:未安装 ID 为“R”的语言。安装的语言是:[]
- javascript - 无法将位于另一个 div 中的 div 中的滑块居中
- python-3.x - Anaconda3 2019.10 (64-bit) 安装卡在设置基础环境
- python-3.x - 如何在 python 中计算 FIX 消息的校验和
- javascript - Js - 检查对象的嵌套值是否相同