antd设置当前form表单中正在change的值,setFieldsValue无效?

今天遇到个场景:在form表单中的一个Input,在输入的时候根据输入值的不同,及时得到不同的value
想到的第一个方法就是在onChange的时候使用setFieldsValue,如下:

...
 
      {getFieldDecorator('name')(
         {
                 setFieldsValue({name:val+'@example.com'})
             }}
         />
      )}

...

这样你会发现一直报错,之前没有写onChange的时候,修改Input值也没有专门给其值set value,那么说明form监测到change的时候默认修改了值,那么先给个延迟试下:

...
{
          setTimeout(()=>{
             setFieldsValue({name:val+'@example.com'})
          },0)  
     }}
/>
...

这样就可以了,但是会render两次,说明form确实在我手写的onChange事件之后又执行了内部的setFieldsValue,故将我加的setFieldsValue覆盖了,加了延迟之后,强制让我手动加的执行时间放在了内部setFieldsValue事件之后了,这样我手动加的事件就会覆盖原内部的事件,但其实现在问题并没有得到解决,因为render两次肯定是无法接受的,然后找文档发现了一个api

antd设置当前form表单中正在change的值,setFieldsValue无效?_第1张图片

...
 
      {getFieldDecorator('name', {
         getValueFromEvent: val => {
                // 进行你想要的操作
                return val+'@example.com';
         }
      })(
         
      )}

...

这样就完美解决啦!


antd设置当前form表单中正在change的值,setFieldsValue无效?_第2张图片

你可能感兴趣的:(antd设置当前form表单中正在change的值,setFieldsValue无效?)