ReactJS:表单中的单选按钮
ReactJS: Radio button in a form
我正在使用 reactstrap 创建表单,但我对单选按钮有疑问,因为我不明白如何保存值。
表格的变量是:
const [formModel, setFormModel] = useState({
name: '',
deletedDate: '',
});
我的表格是:
<AvForm model={formModel} onSubmit={filterResults} onReset={handleFormReset}>
<h3 className="text-center">Form</h3>
<Row>
<Col md="6">
<AvGroup>
<Label id="name" for="name">
Name
</Label>
<AvField
id="name"
data-cy="name"
type="text"
name="name"
onChange={handleChange}
value={formModel.name}
/>
</AvGroup>
<FormGroup check>
<Label check>
<Input
id="deletedDate"
data-cy="deletedDate"
type="radio"
name="deletedDate"
value="true"
onChange={handleChange}
/>{' '}
Yes
</Label>
</FormGroup>
<FormGroup check>
<Label check>
<Input
id="deletedDate"
data-cy="deletedDate"
type="radio"
name="deletedDate"
value="false"
onChange={handleChange}
/>{' '}
No
</Label>
</FormGroup>
</AvGroup>
我的过滤结果是:
const filterResults = (event, errors, values) => {
console.log('values ', values);
let entity = null;
if (errors.length === 0) {
entity = {
...values,
};
}
//other code...
const handleChange = e => {
console.log('e ', e);
const { name, value } = e.target;
console.log('name ', name, ' value ', value);
setFormModel(prevState => ({
...prevState,
[name]: value,
}));
};
现在,当我提交表单时,如果我检查了 filterResult 函数中的 deletedDate 单选按钮,我没有任何关于它的值(但我有名称的值)
如何正确使用单选按钮来保存值?
非常感谢
主要问题是您缺少 checked
属性:
<label>
<input
id="deletedDate"
data-cy="deletedDate"
type="radio"
name="deletedDate"
value="true"
checked={formModel.deletedDate === "true"}
onChange={handleChange}
/>{" "}
Yes
</label>
<label>
<input
id="deletedDate"
data-cy="deletedDate"
type="radio"
name="deletedDate"
value="false"
checked={formModel.deletedDate === "false"}
onChange={handleChange}
/>{" "}
No
</label>
编辑:我已将提交处理程序添加到沙箱。
我正在使用 reactstrap 创建表单,但我对单选按钮有疑问,因为我不明白如何保存值。
表格的变量是:
const [formModel, setFormModel] = useState({
name: '',
deletedDate: '',
});
我的表格是:
<AvForm model={formModel} onSubmit={filterResults} onReset={handleFormReset}>
<h3 className="text-center">Form</h3>
<Row>
<Col md="6">
<AvGroup>
<Label id="name" for="name">
Name
</Label>
<AvField
id="name"
data-cy="name"
type="text"
name="name"
onChange={handleChange}
value={formModel.name}
/>
</AvGroup>
<FormGroup check>
<Label check>
<Input
id="deletedDate"
data-cy="deletedDate"
type="radio"
name="deletedDate"
value="true"
onChange={handleChange}
/>{' '}
Yes
</Label>
</FormGroup>
<FormGroup check>
<Label check>
<Input
id="deletedDate"
data-cy="deletedDate"
type="radio"
name="deletedDate"
value="false"
onChange={handleChange}
/>{' '}
No
</Label>
</FormGroup>
</AvGroup>
我的过滤结果是:
const filterResults = (event, errors, values) => {
console.log('values ', values);
let entity = null;
if (errors.length === 0) {
entity = {
...values,
};
}
//other code...
const handleChange = e => {
console.log('e ', e);
const { name, value } = e.target;
console.log('name ', name, ' value ', value);
setFormModel(prevState => ({
...prevState,
[name]: value,
}));
};
现在,当我提交表单时,如果我检查了 filterResult 函数中的 deletedDate 单选按钮,我没有任何关于它的值(但我有名称的值)
如何正确使用单选按钮来保存值?
非常感谢
主要问题是您缺少 checked
属性:
<label>
<input
id="deletedDate"
data-cy="deletedDate"
type="radio"
name="deletedDate"
value="true"
checked={formModel.deletedDate === "true"}
onChange={handleChange}
/>{" "}
Yes
</label>
<label>
<input
id="deletedDate"
data-cy="deletedDate"
type="radio"
name="deletedDate"
value="false"
checked={formModel.deletedDate === "false"}
onChange={handleChange}
/>{" "}
No
</label>
编辑:我已将提交处理程序添加到沙箱。