react antdesign中的Form.list的默认值问题解决方法

简介: react antdesign中的Form.list的默认值问题解决方法

主要讲添加和编辑用同一个Form.list表单,来回切换并且改变此表单的默认展示几项

相信大家用过antdesign中的Form.list时候都会遇到一个问题吧,就是怎么默认值显示一项?

然后再网上也搜了很多方法,结果还是没有达到自己想要的效果。在这里有一个坑,大家肯定都踩过,我们再Form.list中的属性发现一个initialValue(默认值)  

initialValue的用法:

          <Form
            name="dynamic_form_nest_item"
            onFinish={onFinish}
            form={form}
            // style={{ maxWidth: 600 }}
            style={{ width: '100%' }}
            autoComplete="off"
          >
            <Form.List name="users" initialValue={[{}]}>    
              {(fields, { add, remove }) => (
                <>
                  {fields.map(({ key, name, ...restField }) => (
                    <div
                      key={key}
                      style={{ display: 'flex', marginBottom: 8, flexWrap: 'wrap', width: '100%' }}
                    >
                      <Form.Item
                        style={{ width: '100%' }}
                        {...restField}
                        label={'证书信息'}
                        name={[name, 'name']}
                        rules={[{ required: true, message: 'Missing last name' }]}
                      >
                        <Input placeholder="证书名称" />
                      </Form.Item>
                      <Button
                        type="primary"
                        style={{ marginTop: '130px', marginLeft: '-230px' }}
                        onClick={() => remove(name)}
                        danger
                      >
                        <MinusCircleOutlined />
                        删除
                      </Button>
                    </div>
                  ))}
                  <Form.Item style={{ width: '15%', marginTop: '-40px' }}>
                    <Button
                      type="primary"
                      onClick={() => {
                        addss(fields);
                        add();
                      }}
                      block
                      icon={<PlusOutlined />}
                    >
                      新建
                    </Button>
                  </Form.Item>
                </>
              )}
            </Form.List>
            <Form.Item>
              <Button type="primary" htmlType="submit">
                确认
              </Button>{' '}
              <Button>取消</Button>
            </Form.Item>
          </Form>

配合Form.list使用,他的格式是一个数组包多个对象,有几个对象就默认展示几项,非常方便,但是呢这个属性他有一个弊端,当我们,已经给initialValue赋值一次之后可以再次赋值,但是这个initialValue默认值就无法再改变了,除非刷新,希望大家明白默认值的意思。

const [data,setData] = useState([{}])
<Form.List name="users" initialValue={data} />
setData([{},{}])   //不行
let array = data
setData([...array])  //也不行   

总之各种方法都不行,就在我屋头闷水的时候想到了一个方案,不知道大家有没有注意到表单中的fields表单展示几项都和他息息相关,竟然都是围绕这他来进行增加和删除的,那么我们可以把他换成我们自己创建的一个变量啊,然后对这个变量进行操作!

const [number, setNumber] = useState([{}]);

此时我们就不用Form.list了,用map循环

        <Form
          name="dynamic_form_nest_item"
          onFinish={onFinish}
          onFinishFailed={onFinishFailed}
          form={form}
          // style={{ maxWidth: 600 }}
          style={{ width: '100%' }}
          autoComplete="off"
        >
          {/* <Form.List name="users">
            {(fields, { add, remove }) => ( */}
          <>
            {number.map((key, name) => (
              <div
                key={name}
                style={{ display: 'flex', marginBottom: 8, flexWrap: 'wrap', width: '100%' }}
              >
                <Form.Item
                  style={{ width: '100%' }}
                  label={'证书信息'}
                  name={[name, name + 'name']}
                  rules={[{ required: true, message: 'Missing last name' }]}
                >
                  <Input placeholder="证书名称" />
                </Form.Item>
                <Button
                  type="primary"
                  style={{ marginTop: '130px', marginLeft: '-230px' }}
                  // onClick={() => remove(name)}
                  danger
                >
                  <MinusCircleOutlined />
                  删除
                </Button>
              </div>
            ))}
            <Form.Item style={{ width: '15%', marginTop: '-40px' }}>
              <Button
                type="primary"
                onClick={() => {
                  addss();
                  // add();
                }}
                block
                icon={<PlusOutlined />}
              >
                新建
              </Button>
            </Form.Item>
          </>
          {/* )} */}
          {/* </Form.List> */}
          <Form.Item>
            <Button type="primary" htmlType="submit">
              确认
            </Button>{' '}
            <Button>取消</Button>
          </Form.Item>
        </Form>

如果想要新增一项只需要给number加上一个空对象就行了,删除,同理删除一个对象

下期讲如何回显数据,这和name={[name, name + 'name']}息息相关


相关文章
|
7月前
|
前端开发 JavaScript
react 修改 antdesign 的 组件默认样式
react 修改 antdesign 的 组件默认样式
265 0
|
3月前
|
前端开发
React添加路径别名alias、接受props默认值、并二次封装antd中Modal组件与使用
本文介绍了在React项目中如何添加路径别名alias以简化模块引入路径,设置组件props的默认值,以及如何二次封装Ant Design的Modal组件。文章还提供了具体的代码示例,包括配置Webpack的alias、设置defaultProps以及封装Modal组件的步骤和方法。
74 1
React添加路径别名alias、接受props默认值、并二次封装antd中Modal组件与使用
|
4月前
|
前端开发 C++
使用 Vite 创建 React+TS+SW 项目并整合 AntDesign 、Scss 等组件或插件
本文记录了如何使用Vite创建一个React+TypeScript+Service Workers(SW)项目,并整合AntDesign组件库和Scss等插件,包括项目的创建、配置问题解决、AntDesign和Scss的整合方法。
270 1
|
API
React+Hook+ts+antDesign实现table行编辑功能(1)
React+Hook+ts+antDesign实现table行编辑功能
200 0
|
7月前
|
前端开发
React 函数组件与类组件属性默认值
React 函数组件与类组件属性默认值
73 0
|
前端开发
前端项目实战壹佰react-admin+material ui-踩坑-List的用法之filterDefaultValues设置默认值情况
前端项目实战壹佰react-admin+material ui-踩坑-List的用法之filterDefaultValues设置默认值情况
52 0
React+Hook+ts+antDesign实现伪定时调用接口功能
React+Hook+ts+antDesign实现伪定时调用接口功能
74 0
|
前端开发 数据处理
React+Hook+ts+antDesign实现table行编辑功能(2)
React+Hook+ts+antDesign实现table行编辑功能
120 0
|
前端开发 数据格式
【React工作记录八十八】React+antDesign封装一个tab组件(类组件) -3
【React工作记录八十八】React+antDesign封装一个tab组件(类组件)
106 0
|
前端开发 数据格式
【React工作记录八十八】React+antDesign封装一个tab组件(类组件) -1
【React工作记录八十八】React+antDesign封装一个tab组件(类组件)
88 0
下一篇
无影云桌面