十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

formik-antd动态表单行进阶技巧:3步掌握 Table + AddRowButton + RemoveRowButton 完整教程

formik-antd动态表单行进阶技巧:3步掌握 Table + AddRowButton + RemoveRowButton 完整教程 formik-antd动态表单行进阶技巧3步掌握 Table AddRowButton RemoveRowButton 完整教程【免费下载链接】formik-antdSimple declarative bindings for Ant Design and Formik.项目地址: https://gitcode.com/gh_mirrors/fo/formik-antdformik-antd是一款为 Formik 和 Ant Design 提供简单声明式绑定的 React 表单库。本文将带你用它的Table、AddRowButton、RemoveRowButton三个组件3 步搞定最头疼的动态表单行动态增删表格行场景告别手写状态管理。为什么动态表单难写普通表单的字段是固定的而动态表单行要求点一下按钮新增一行可编辑数据每行都有独立的输入控件且数据自动同步点删除按钮对应行的数据被干净移除用原生 Formik 需要手写FieldArray、push、remove和大量index拼接逻辑。formik-antd 把这三件事封装成了现成组件。环境准备1分钟安装确保项目满足版本要求详见 package.jsonantd ≥ 3.12.1 且 5推荐 Ant Design 4formik ≥ 1.4.1 且 3React 16.8 ~ 17npm install formik-antd然后在入口文件加入import antd/dist/antd.css即可开始使用。核心原理三个组件如何协作组件职责关键 props源码位置Table把表格数据源绑定到 Formik 字段字段值即dataSourcename antd Table 全部 propssrc/table/index.tsxAddRowButton向数组字段 push 一行新数据namecreateNewRow回调src/add-row-button/index.tsxRemoveRowButton按行号 remove 数组字段中对应数据nameindexsrc/remove-row-button/index.tsx 从源码可以看到Table内部用 Formik 的Field包裹 antd Table把field.value直接作为dataSource两个按钮则基于底层的 src/array-button/index.tsx一个包装了FieldArray的 Button实现push和remove所以它们天然是表单数据流的一部分。步骤一用 Table 绑定表单数据给Table设置name指向initialValues中的数组字段其余写法与 antd Table 完全一致Table namedata pagination{false} columns{columns} /组件会自动取表单里data字段作为数据源字段为空时渲染空表格无需额外判断。步骤二用 AddRowButton 一键新增行createNewRow是一个返回空白行对象的函数点击按钮时执行array.push(createNewRow())AddRowButton namedata createNewRow{() ({ key: Date.now(), name: })} 新增一行/AddRowButton⚠️ 注意createNewRow返回的对象里要带一个唯一 key如时间戳保证 React 列表渲染不出错。步骤三用 RemoveRowButton 删除当前行在列的render函数里能拿到行下标index把它传给RemoveRowButton即可精准删除对应行{ title: 操作, render: (text, record, index) ( RemoveRowButton namedata index{index}删除/RemoveRowButton ), }完整示例可编辑的动态表格把行内编辑也纳入进来——在列的render中使用带name的 formik-antd 输入组件用点号下标的路径语法定位单元格Formik initialValues{{ data: [{ key: 1, name: lorem ipsum }] }} onSubmit{...} Form AddRowButton namedata createNewRow{() ({ key: Date.now(), name: })} / Table namedata pagination{false} columns{[ { title: 名称, dataIndex: name, render: (text, record, index) Input name{data.${index}.name} /, }, { title: 操作, render: (text, record, index) ( RemoveRowButton namedata index{index}删除/RemoveRowButton ), }, ]} / SubmitButton / /Form /Formik这套写法与官方测试用例 src/table/index.test.tsx 中的用法完全一致覆盖了初始渲染、行内修改、删除行、新增行四种行为。进阶技巧与避坑指南嵌套数组路径写法动态行内字段遵循 Formik 的 lodash 风格路径如data.${index}.name深层嵌套对象同样可用a.b.c形式访问。调试神器 FormikDebug开发环境下在表单里放一个FormikDebug /可实时打印整个表单 state排查动态行的数据问题非常直观源码见 src/formik-debug/index.tsx。按钮的 antd 能力全保留三个按钮都透传 antdButton的 propstype、icon、danger等随意使用如RemoveRowButton typelink danger .../。性能优化字段组件支持fastprop数据量大时可为行内输入框开启 FastField 优化。按需加载不想引入整个 antd 时可按路径单独导入组件及样式例如import Table from formik-antd/es/table减小打包体积。源码路径速查想改什么去哪里看表格与表单字段的绑定逻辑src/table/index.tsx新增行按钮实现src/add-row-button/index.tsx删除行按钮实现src/remove-row-button/index.tsx底层 FieldArray 按钮src/array-button/index.tsx表单容器与提交/重置src/form/form.tsx项目总览文档README.md总结formik-antd 用三个极简组件就把动态表单行这个高频痛点解决了Table负责展示——表单字段即数据源AddRowButton负责新增——一行回调生成空白行RemoveRowButton负责删除——按下标精准移除掌握了这 3 步你就可以轻松构建订单明细、联系人列表、多行优惠码等任何可增删行的表单场景。上手只需一个npm install快去试试吧✨【免费下载链接】formik-antdSimple declarative bindings for Ant Design and Formik.项目地址: https://gitcode.com/gh_mirrors/fo/formik-antd创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表