antd-Form——getValueFromEvent和shouldUpdate

2,733 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

当检测表单值发生改变,想做一些操作时,发现有两个属性有同样的作用(但每个属性都不仅限于这个作用)

getValueFromEvent:

这个方法本来的作用,是为当前表单域赋值,当前表单值发生变化时触发,出发getValueFromEvent的回调函数,回调返回e,可以通过e拿到表单更新的数据,通过返回的值,再次为表单赋值。

注意不管是为了实现表单赋值,还是实现联动,都必须给getValueFromEvent回调函数返回值,没有返回值,返回空,将会将表单置空

但是在这里我们可以通过他表单值发生改变执行回调的特性,设置一个状态值,去记录当前表单的状态或者选中值,然后在外面通过判断这个记录值,去实现联动.

需要注意的是,初始值initialValues,并不会使getValueFromEvent执行

const [allowPrepay,setAllowPrepay] = useState('');

<ProFormRadio.Group
   name="isAllowPrepay"
   rules={[{ required: true, message: '请选择是否允许提还' }]}
   getValueFromEvent={(e) => {
        const { target } = e;
        { value } = target;
   	setAllowPrepay(value);
   	return value;
    }}
    options={[
 	{ label: '是', value: true },
	{ label: '否', value: false },
    ]}
/>
{allowPrepay && <Form.Item
    name="prepayPrice"
    label="提前还款手续费"
    rules={[{ required: true, message: '必填' }]}
 >
     <Input />
</Form.Item>}

shouldUpdate:

判断当表单数据前后不一致的话,然后通过包裹,可以拿到该表单最新的值,进行判断展示某个表单,实现联动.

<Form.Item
    label="性别"
    name="sex"
    rules={[{ required: true, message: '必选' }]}
   >
        <Radio>
            <Option value="men"></Option>
            <Option value="women"></Option>
        </Radio>
</Form.Item>
<Form.Item
    noStyle
    shouldUpdate={(prevValues, currentValues) =>
	.sex!== currentValues.sex
    }
>
    {({ getFieldValue }) =>
        getFieldValue('sex') === "women"? (
            <Form.Item
                name="age"
                label="年龄"
                rules={[{ required: true, message: '必填' }]}
            >
                    <Input />
            </Form.Item>
        ) : null
    }
</Form.Item>