主要讲添加和编辑用同一个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']}息息相关