【发布时间】:2017-08-19 04:51:55
【问题描述】:
我正在尝试根据 React.js 中单选按钮的“已检查”属性来处理事件。我希望按钮允许选择多个值,因此我删除了似乎不允许多选的“名称”属性。
基本单选按钮组件看起来像
export function Radio_Button_Multiple_Selection (props) {
return (
<label>
<input type="radio"
checked={props.form_data[props.field_name].indexOf(props.btn_value) > -1}
onClick={props.radio_effect} />
{props.btn_value}
</label>
)
}
我有一个 form_data 对象,它有一个与单选按钮的 btn_value 相对应的值数组,如果在数组中找到该值,它应该被选中。 (这部分现在工作正常,实际上它们确实按预期显示):
const form_data = {
...
occupations: ['student', 'merchant', 'paladin', 'troll'],
...
}
现在,我还有一个 react 类,它有一个方法来处理职业数组中的值,响应被舔的单选按钮是否已经被选中:
handleRadioButton (event) {
const target = event.target;
const value = target.value;
const isChecked = target.checked;
console.log(isChecked) // this undefined. why?!?
if (isChecked) {
// remove it from array
// etc.
} else {
// add it to array
// etc.
}
}
我的主要问题是:
当我 console.log 在 RadioButton 组件的 checked 属性中返回布尔值的“已检查”逻辑时,它会按预期出现(如果它在数组中或不在数组中,则为 true 或 false)。但在处理按钮的类方法中,它总是以checked = undefined 的形式出现。
【问题讨论】:
-
您确定从数组中删除了该项吗?
-
我正在尝试首先访问事件对象中的选中属性。那是我还没能做到的;或者至少不正确:我总是在事件处理程序方法中得到 isChecked = true,即使我在单选按钮组件中得到 false
-
请尝试!否定 if 条件中的值
-
因为单选按钮通常不会像复选框那样取消选中
-
SO stackoverflow.com/questions/27784212/…上也有一篇关于这个的帖子
标签: reactjs events radio-button checked