Formik 是一个流行的 React 库,用于处理表单状态和验证。arrayHelpers
是 Formik 提供的一个工具对象,用于处理数组字段的操作,如添加、编辑和删除数组中的项。
arrayHelpers
包含以下方法:
push
: 向数组中添加一个新项。remove
: 从数组中移除指定索引的项。replace
: 替换数组中指定索引的项。insert
: 在指定索引位置插入一个新项。在使用 arrayHelpers.remove
方法时,可能会遇到未能删除所选项目的情况。这通常是由于以下几个原因造成的:
确保传递给 remove
方法的索引是正确的,并且在调用时数组状态是最新的。
import React from 'react';
import { Formik, FieldArray } from 'formik';
const MyForm = () => (
<Formik
initialValues={{ items: ['item1', 'item2', 'item3'] }}
onSubmit={(values) => {
console.log(values);
}}
>
{({ values, setFieldValue }) => (
<form onSubmit={formik.handleSubmit}>
<FieldArray name="items">
{arrayHelpers => (
<div>
{values.items.map((item, index) => (
<div key={index}>
<input
type="text"
name={`items.${index}`}
value={item}
onChange={e => {
arrayHelpers.replace(index, e.target.value);
}}
/>
<button type="button" onClick={() => arrayHelpers.remove(index)}>Remove</button>
</div>
))}
</div>
)}
</FieldArray>
<button type="submit">Submit</button>
</form>
)}
</Formik>
);
export default MyForm;
确保每个数组项都有一个稳定的键值,以避免 React 在重新渲染时混淆元素。
{values.items.map((item, index) => (
<div key={item.id}> {/* 假设每个 item 都有一个唯一的 id */}
...
</div>
))}
如果删除操作依赖于异步调用,确保在数据更新后再调用 remove
方法。
const handleRemove = async (index) => {
// 假设 deleteItem 是一个异步函数
await deleteItem(values.items[index]);
arrayHelpers.remove(index);
};
arrayHelpers
在处理动态表单字段时非常有用,例如:
arrayHelpers
提供了一种直观的方式来处理数组字段的状态。通过上述方法,可以有效地解决 arrayHelpers.remove
未能删除所选项目的问题,并确保表单状态的正确管理。
领取专属 10元无门槛券
手把手带您无忧上云