Formik 处理一组对象
Formik handle an array of objects
我正在尝试实现像这样的结构的对象数组
selectedItems: [
{
_id: ""
}
]
我想做的是当用户选择例如2个或更多_id时,我希望结构是这样的
[
{
_id: "123"
},
{
_id: "456"
},
{
_id: "789"
},
]
但是我目前通过我的实现得到的是一个 _id 数组,它将包含几个像这样的项目
[
{
_id: ["123", "456", "789"]
}
]
我遵循了 formik 的文档,该文档建议在我们有对象数组时实施此解决方案。
我的实现
const GetSelectedItems = () => {
return (
<Formik
initialValues={{
selectedItems: [{
_id: ""
}]
}}
onSubmit={values => {
console.log(values)
}}
render={({values, handleChange}) => (
<Form>
<FieldArray
name="selectedItems"
render={arrayHelpers => (
<div>
{values.selectedItems && values.selectedItems.length > 0 ? (
values.selectedItems.map((item, index) => (
<div key={index}>
<Field as="div"
name={`selectedItems${[0]}._id`}
>
<select name={`selectedItems.${[0]}._id`}
multiple={true}
className="form-control"
value={item._id}
onChange={event => {
handleChange(event);
}}
>
<option value={values.selectedItems._id}>
Choisir items
</option>
{itemList(items)} // data from api
</select>
</Field>
</div>
))
) : null}
<div>
<div>
<button type="submit">Submit</button>
</div>
</div>
</div>
)}
/>
</Form>
)}
/>)
}
您不需要为 select 的选项组件提供 name 属性,只需将其删除,您的代码将 运行 如预期的那样:
// Removed name props from this component
<option key={option._id} value={`${option._id}`}>
{option._id}
</option>
我正在尝试实现像这样的结构的对象数组
selectedItems: [
{
_id: ""
}
]
我想做的是当用户选择例如2个或更多_id时,我希望结构是这样的
[
{
_id: "123"
},
{
_id: "456"
},
{
_id: "789"
},
]
但是我目前通过我的实现得到的是一个 _id 数组,它将包含几个像这样的项目
[
{
_id: ["123", "456", "789"]
}
]
我遵循了 formik 的文档,该文档建议在我们有对象数组时实施此解决方案。 我的实现
const GetSelectedItems = () => {
return (
<Formik
initialValues={{
selectedItems: [{
_id: ""
}]
}}
onSubmit={values => {
console.log(values)
}}
render={({values, handleChange}) => (
<Form>
<FieldArray
name="selectedItems"
render={arrayHelpers => (
<div>
{values.selectedItems && values.selectedItems.length > 0 ? (
values.selectedItems.map((item, index) => (
<div key={index}>
<Field as="div"
name={`selectedItems${[0]}._id`}
>
<select name={`selectedItems.${[0]}._id`}
multiple={true}
className="form-control"
value={item._id}
onChange={event => {
handleChange(event);
}}
>
<option value={values.selectedItems._id}>
Choisir items
</option>
{itemList(items)} // data from api
</select>
</Field>
</div>
))
) : null}
<div>
<div>
<button type="submit">Submit</button>
</div>
</div>
</div>
)}
/>
</Form>
)}
/>)
}
您不需要为 select 的选项组件提供 name 属性,只需将其删除,您的代码将 运行 如预期的那样:
// Removed name props from this component
<option key={option._id} value={`${option._id}`}>
{option._id}
</option>