From.List用法详解

1.Form.List用法好处:可以使用antd中自带的验证。

2.不可控组件,用法简单

使用栗子:https://codesandbox.io/s/wonderful-lichterman-br63z?file=/index.js:1723-1742

可在form中加入初始值:

Form.List中可以有多个字段,name要定义为

           name={[field.name, "lastName"]}   //第二项是组内设置的name值
           fieldKey={[field.fieldKey, "lastName"]}

      <Form.List name="users">
        {(fields, { add, remove }) => {
          /**
           * `fields` internal fill with `name`, `key`, `fieldKey` props.
           * You can extends this into sub field to support multiple dynamic fields.
           */
          return (
            <div>
              {fields.map((field, index) => (
                <Row key={field.key}>
                  <Col>
                    <Form.Item
                      name={[field.name, "lastName"]}
                      fieldKey={[field.fieldKey, "lastName"]}
                      rules={rules}
                    >
                      <Input placeholder="last name" />
                    </Form.Item>
                  </Col>
                  <Col>
                    <Form.Item
                      name={[field.name, "firstName"]}
                      fieldKey={[field.fieldKey, "firstName"]}
                      rules={rules}
                    >
                      <Input placeholder="first name" />
                    </Form.Item>
                  </Col>
                  <Col flex="none">
                    <MinusCircleOutlined
                      className="dynamic-delete-button"
                      onClick={() => {
                        remove(field.name);
                      }}
                    />
                  </Col>
                </Row>
              ))}
              <Form.Item>
                <Button
                  type="dashed"
                  onClick={() => {
                    add();
                  }}
                  style={{ width: "100%" }}
                >
                  <PlusOutlined /> Add field
                </Button>
              </Form.Item>
            </div>
          );
        }}
      </Form.List>

      <Form.Item>
        <Button type="primary" htmlType="submit">
          Submit
        </Button>
      </Form.Item>

3、如何给Form.List添加默认值:(使用initialValues)

<Form form={form} onFinish={onFinish} onFinishFailed={onFinishFailed} initialValues={{
                list: itemList
            }}>
                <h2>优惠方案</h2>
                <Form.List name='list'>
                    {(fields, { add, remove }) => {
                        console.log(fields);
                        return (<div>
                            {fields.map((field, index) => (
                                <div className="row group" key={field.key}>
                                    <Form.Item className='num'
                                        name={[field.name, 'minRange']}
                                        fieldKey={[field.fieldKey, 'minRange']}
                                        rules={[{validator: handleValitorMin} ]}>
                                        <Input placeholder={2} addonAfter="人" type='number' />
                                    </Form.Item>
                                    <span className='row-span'>——</span>
                                    <Form.Item className='num' 
                                        name={[field.name, 'maxRange']}
                                        fieldKey={[field.fieldKey, 'maxRange']}
                                        rules={[{validator: handleValitorMax }]}>
                                        <Input addonAfter='人' type='number' />
                                    </Form.Item>
                                    <span className='row-span'>的团报选手享受</span>
                                    <Form.Item className='num discount'
                                        name={[field.name, 'discount']}
                                        fieldKey={[field.fieldKey, 'discount']}
                                        rules={[{validator: handleValitorDiscount}]}>
                                        <Input addonAfter={selectAfter} placeholder="0-10整数或小数" type='number' />
                                    </Form.Item>
                                    <span className="close-icon">
                                        <CloseCircleFilled
                                            className="dynamic-delete-button"
                                            onClick={() => {
                                                remove(field.name);
                                            }}
                                        />
                                    </span>
                                </div>
                            ))}
                            <Button
                                onClick={handleAddItem}
                                style={{ width: '80px' }}
                            >
                                <PlusOutlined />新增
                            </Button>
                        </div>);
                    }}
                </Form.List>
            </Form>

4、Form.List添加验证:(使用validator,自定义验证)

const handleValitorMax = (rule, value, callback)=>{
        let arr = rule.field.split('.');
        let index = Number(arr[1]) || 0;
        let discountItem = form.getFieldValue('list');
        let prevNum = Number(discountItem[index].minRange) || 2;
        value = Number(value);
        // console.log('max:', arr, prevNum, discountItem);
        if (!value) {
            return  Promise.reject('人数必填');
        }else if(value <= prevNum){
            return Promise.reject('人数要大于最小人数');
        }
        return  Promise.resolve();
    };

5、Form.List自定义添加一项(不使用默认的add方法)

const handleAddItem = ()=>{
        const list = form.getFieldValue('list');
        const nextList = list.concat(discountObj);
        form.setFieldsValue({
            list: nextList,
        });
    };

 

ListChangeListener.Change是JavaFX中的一个接口,用于监听ObservableList的变化并进行响应。它提供了一系列方法,用于检测ObservableList的变化类型、变化范围以及具体变化内容等信息。 下面是一个简单的使用示例: ```java ObservableList<String> list = FXCollections.observableArrayList(); list.addListener((ListChangeListener<String>) change -> { while (change.next()) { if (change.wasAdded()) { System.out.println("新增元素:" + change.getAddedSubList()); } if (change.wasRemoved()) { System.out.println("移除元素:" + change.getRemoved()); } if (change.wasUpdated()) { System.out.println("更新元素:" + change.getList().subList(change.getFrom(), change.getTo())); } if (change.wasPermutated()) { System.out.println("置换元素:" + change.getPermutation()); } } }); list.addAll("a", "b", "c"); list.remove(0); list.set(1, "d"); list.sort(String::compareTo); ``` 在这个示例中,我们首先创建了一个ObservableList对象,并添加了一个监听器。在监听器的回调方法中,我们通过调用ListChangeListener.Change的各种方法来检测列表的变化类型,并分别进行相应的处理。最后,我们对列表进行了一些修改操作,以便触发监听器的回调。 需要注意的是,ListChangeListener.Change的回调方法将在JavaFX应用程序线程中执行,因此如果需要在回调方法中进行一些耗时的操作,需要考虑使用JavaFX的并发机制,以免阻塞UI线程。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值