{"id":540,"date":"2026-06-29T14:45:25","date_gmt":"2026-06-29T06:45:25","guid":{"rendered":"https:\/\/mitongxue.cn\/?p=540"},"modified":"2026-06-29T14:45:25","modified_gmt":"2026-06-29T06:45:25","slug":"react%e5%92%8cantd%e9%80%9a%e7%94%a8%e8%a1%a8%e5%8d%95%e5%a4%84%e7%90%86","status":"publish","type":"post","link":"https:\/\/mitongxue.cn\/index.php\/2026\/06\/29\/react%e5%92%8cantd%e9%80%9a%e7%94%a8%e8%a1%a8%e5%8d%95%e5%a4%84%e7%90%86\/","title":{"rendered":"React\u548cantd\u901a\u7528\u8868\u5355\u5904\u7406"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">\u7528\u6237\u521b\u5efa<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u5e38\u7528<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\nconst &#91;form] = Form.useForm();\nonFinish\u65b9\u6cd5\uff0c\u7edf\u4e00\u5904\u7406\u63d0\u4ea4\nonBlur={() => beforeChecked(item)}\nform.validateFields()\nform.setFieldsValue()\nform.getFieldValue()\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>import React from 'react';\nimport {\n  Form,\n  Input,\n  Select,\n  Button,\n  DatePicker,\n  Row,\n  Col,\n  message,\n} from 'antd';\nimport formList from 'staticList\/staffList';\nimport DropPopover from 'components\/DropPopover';\nimport { staffRule } from 'utils\/rules';\nimport $http from 'api';\nimport Upload from 'components\/Upload';\n\nconst { Option } = Select;\n\nconst AddForm = ({ setDialogStatus, reloadList }) => {\n  const &#91;form] = Form.useForm();\n\n  \/\/- \u65b0\u589e\u7528\u6237\u8868\u5355\u63d0\u4ea4\n  const _onFinish = async (data) => {\n    delete data.departmentName;\n    delete data.levelName;\n    const { code, msg } = await $http.createStaff(data);\n    if (code) return;\n    message.success(msg);\n    reloadList();\n    setDialogStatus(false);\n    form.resetFields();\n  };\n\n  \/\/- \u7528\u6237\u540d\u5bc6\u7801\u7684\u68c0\u6d4b\n  const beforeChecked = async (item) => {\n    if (item.itemName !== 'accountName' || item.itemName !== 'mobile') return;\n\n    const reqData = await form.validateFields(&#91;item.itemName]);\n    const { data, msg } = await $http.checkIsExists({ checkData: reqData });\n\n    if (data) {\n      form.setFieldsValue({ &#91;item.itemName]: '' });\n      return message.error(msg);\n    }\n  };\n\n  \/\/- \u8868\u5355\u9879\n  const formData = {\n    input: (item) => (\n      &lt;Input\n        placeholder={item.placeholderVal}\n        type={item.itemName === 'password' ? 'password' : 'text'}\n        onBlur={() => beforeChecked(item)}\n      \/>\n    ),\n    select: (item) => (\n      &lt;Select placeholder={item.placeholderVal}>\n        {item.optionData.map((val, index) => {\n          return (\n            &lt;Option key={index} value={index}>\n              {val}\n            &lt;\/Option>\n          );\n        })}\n      &lt;\/Select>\n    ),\n    date: (item) => (\n      &lt;DatePicker style={{ width: '100%' }} placeholder={item.placeholderVal} \/>\n    ),\n    popover: (item) => (\n      &lt;Input\n        placeholder={item.placeholderVal}\n        readOnly\n        addonAfter={\n          &lt;DropPopover\n            placeholderVal={item.placeholderVal}\n            interfaceName={item.url}\n            searchType={item.itemName}\n            getSelectItem={(res) => {\n              form.setFieldsValue({\n                &#91;item.itemName]: res&#91;item.itemName],\n                &#91;item.itemName.split('N')&#91;0]]: res._id,\n              });\n            }}\n          \/>\n        }\n      \/>\n    ),\n    upload: (item) => (\n      &lt;Upload\n        getNewAvatar={(avatar) => {\n          form.setFieldsValue({ avatar });\n        }}\n      \/>\n    ),\n  };\n\n  return (\n    &lt;Form \n    layout=\"vertical\" \n    form={form} \n    onFinish={_onFinish}>\n      {formList.map((arr, index) => {\n        return (\n          &lt;Row key={index} justify={'space-between'}>\n            {arr.map((item, childIndex) => {\n              return (\n                &lt;Col span=\"11\" key={childIndex}>\n                  &lt;Form.Item\n                    style={{ ...item.style }}\n                    name={item.itemName}\n                    label={item.labelTxt}\n                    rules={staffRule&#91;item.itemName]}\n                  >\n                    {formData&#91;item.renderType](item)}\n                  &lt;\/Form.Item>\n                &lt;\/Col>\n              );\n            })}\n          &lt;\/Row>\n        );\n      })}\n      &lt;Col span={24} style={{ textAlign: 'right' }}>\n        &lt;Form.Item>\n          &lt;Button type=\"primary\" htmlType=\"submit\">\n            \u521b\u5efa\n          &lt;\/Button>\n        &lt;\/Form.Item>\n      &lt;\/Col>\n    &lt;\/Form>\n  );\n};\n\nexport default AddForm;\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u7528\u6237\u521b\u5efa \u5e38\u7528<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12,11],"tags":[31,28,29],"class_list":["post-540","post","type-post","status-publish","format-standard","hentry","category-react-","category-front","tag-ant-design","tag-react","tag-umi"],"featured_image_urls":{"full":"","thumbnail":"","medium":"","medium_large":"","large":"","1536x1536":"","2048x2048":""},"author_info":{"info":["\u9648 \u67d0\u4eba"]},"category_info":"<a href=\"https:\/\/mitongxue.cn\/index.php\/category\/front\/react-%e5%89%8d%e7%ab%af\/\" rel=\"category tag\">React<\/a> <a href=\"https:\/\/mitongxue.cn\/index.php\/category\/front\/\" rel=\"category tag\">\u524d\u7aef<\/a>","tag_info":"\u524d\u7aef","comment_count":"0","_links":{"self":[{"href":"https:\/\/mitongxue.cn\/index.php\/wp-json\/wp\/v2\/posts\/540","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mitongxue.cn\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mitongxue.cn\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mitongxue.cn\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mitongxue.cn\/index.php\/wp-json\/wp\/v2\/comments?post=540"}],"version-history":[{"count":5,"href":"https:\/\/mitongxue.cn\/index.php\/wp-json\/wp\/v2\/posts\/540\/revisions"}],"predecessor-version":[{"id":545,"href":"https:\/\/mitongxue.cn\/index.php\/wp-json\/wp\/v2\/posts\/540\/revisions\/545"}],"wp:attachment":[{"href":"https:\/\/mitongxue.cn\/index.php\/wp-json\/wp\/v2\/media?parent=540"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mitongxue.cn\/index.php\/wp-json\/wp\/v2\/categories?post=540"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mitongxue.cn\/index.php\/wp-json\/wp\/v2\/tags?post=540"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}