如果我使用formik,如何在嵌套对象中写入正确的值?
P粉410239819
P粉410239819 2023-08-17 16:26:31
0
1
460

给定一个与表单对象中的字段名称匹配的字段数组,我试图编写一个嵌套值,但由于某种原因,formik不知道如何编写嵌套值,这仅适用于顶层的值

我会在评论中留下codesandbox的链接

export default function App() { const form = useFormik({ initialValues: { name: "", login: "", about: { age: "", rank: "", car: { name: "", years: "" } } } }); const fields = [ { name: { title: "Your name", fields: {} }, login: { title: "Your login", fields: {} }, about: { title: "About", fields: { age: { title: "Your age", fields: {} }, rank: { title: "Your rank", fields: {} }, car: { title: "Your car", fields: { name: { title: "Car name", fields: {} }, years: { title: "Car years", fields: {} } } } } } } ]; const { values, handleChange } = form; console.log("VALUES", values); const itemsRender = (item, idx) => { const key = Object.keys(item).at(-1); return ( 

{item[key]?.title}

{!isEmpty(item[key]?.fields) && (
{Object.entries(item[key]?.fields).map(itemsRender)}
)}
); }; return <>{fields.map(itemsRender)}; }
P粉410239819
P粉410239819

全部回复 (1)
P粉046878197

您需要更新namevalue属性,以包含嵌套字段的完整路径

您的代码只处理了一层嵌套。
对于更深层次的嵌套,您需要递归地渲染和处理嵌套字段

{Object.entries(item[key]?.fields).map(([nestedFieldName, fieldObj]) => ( 

{fieldObj.title}

{fieldObj.fields && (
{Object.entries(fieldObj.fields).map(itemsRender)}
)}
))}

最后,不要直接使用handleChange处理嵌套字段,而应该使用Formik的setFieldValue来更新嵌套字段的值。
您可以从表单对象中访问setFieldValue

onChange={(e) => { form.setFieldValue(`${key}.${nestedFieldName}`, e.target.value); }}

codesandbox

    最新下载
    更多>
    网站特效
    网站源码
    网站素材
    前端模板
    关于我们 免责声明 Sitemap
    PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!