如何使用Formik fieldArray设置React选择的默认值?
我正在使用formik和fieldarray来创建动态形式,并且正在使用反应选择。我正在研究项目的编辑。在编辑中,如果存在以前的值,则必须显示这些值,并且可以更改这些值,但是我无法创建这些值。这是我的代码。
这是formik的初始值的代码,
const initialOrderItemData = orderItems && orderItems.map((orderItem) => {
return {
itemId: orderItem.itemId,
quantity: orderItem.quantity,
}
});
const initialOrderInfo = {
orderedItemDataArray: initialOrderItemData,
};
这是我使用此代码的表单,
<Formik
initialValues={initialOrderInfo}
onSubmit={handleSubmit}
validationSchema={HotelOrderSchema}
>
{({ errors, setFieldValue, touched, values, name, }) => (
<Form>
<Row>
<Table size="sm" hover>
<thead>
<tr>
<th>Item</th>
<th>Quantity</th>
<th>Operation</th>
</tr>
</thead>
<tbody>
<FieldArray
name="orderedItemDataArray"
render={({ remove, push }) => (
<>
{values.orderedItemDataArray.length > 0 &&
values.orderedItemDataArray.map(
(order, index) => (
<tr key={index}>
<td>
<Select
as="select"
name={`orderedItemDataArray.${index}.itemId`}
options={menuOptions}
placeholder="Type"
// value={selectedItems(order.itemId)}
value={menuOptions.find(op => {
return op.value === order.itemId
})}
/>
</td>
<td>
<Field
type="number"
className="form-control"
name={`orderedItemDataArray.${index}.quantity`}
min="0"
placeholder="Quantity"
/>
</td>
<td>
<ButtonGroup>
{values.orderedItemDataArray
.length !== 1 && (
<Button
color="primary"
size="sm"
onClick={() => remove(index)}
>
-
</Button>
)}
{values.orderedItemDataArray
.length -
1 ===
index && (
<Button
color="secondary"
size="sm"
onClick={() =>
push({
itemId: '',
quantity: '',
})
}
>
+
</Button>
)}
</ButtonGroup>
</td>
</tr>
)
)}
</>
)}
/>
</tbody>
</Table>
</Row>
</Form>
</Formik>
我能够获得该值,但我无法更改值并设置新值。
I am using formik and fieldarray for creating dynamic form and I am using react-select. I am working on edit of items. On Edit if there exists previous values then those values must be shown and those values can be changed, but somehow I am unable to create. Here's my code.
here is the code for initial value of formik
const initialOrderItemData = orderItems && orderItems.map((orderItem) => {
return {
itemId: orderItem.itemId,
quantity: orderItem.quantity,
}
});
const initialOrderInfo = {
orderedItemDataArray: initialOrderItemData,
};
This is my form
<Formik
initialValues={initialOrderInfo}
onSubmit={handleSubmit}
validationSchema={HotelOrderSchema}
>
{({ errors, setFieldValue, touched, values, name, }) => (
<Form>
<Row>
<Table size="sm" hover>
<thead>
<tr>
<th>Item</th>
<th>Quantity</th>
<th>Operation</th>
</tr>
</thead>
<tbody>
<FieldArray
name="orderedItemDataArray"
render={({ remove, push }) => (
<>
{values.orderedItemDataArray.length > 0 &&
values.orderedItemDataArray.map(
(order, index) => (
<tr key={index}>
<td>
<Select
as="select"
name={`orderedItemDataArray.${index}.itemId`}
options={menuOptions}
placeholder="Type"
// value={selectedItems(order.itemId)}
value={menuOptions.find(op => {
return op.value === order.itemId
})}
/>
</td>
<td>
<Field
type="number"
className="form-control"
name={`orderedItemDataArray.${index}.quantity`}
min="0"
placeholder="Quantity"
/>
</td>
<td>
<ButtonGroup>
{values.orderedItemDataArray
.length !== 1 && (
<Button
color="primary"
size="sm"
onClick={() => remove(index)}
>
-
</Button>
)}
{values.orderedItemDataArray
.length -
1 ===
index && (
<Button
color="secondary"
size="sm"
onClick={() =>
push({
itemId: '',
quantity: '',
})
}
>
+
</Button>
)}
</ButtonGroup>
</td>
</tr>
)
)}
</>
)}
/>
</tbody>
</Table>
</Row>
</Form>
</Formik>
with this code I am able to get the value but I am unable to change the value and set the new value.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
在您的选择组件中,您必须包括一个on Change事件,这样
In your select component you must include an onChange event like so