antd設(shè)置當(dāng)前form表單中正在change的值,setFieldsValue無效?

今天遇到個場景:在form表單中的一個Input,在輸入的時候根據(jù)輸入值的不同,及時得到不同的value
想到的第一個方法就是在onChange的時候使用setFieldsValue,如下:

...
 <Form.Item>
      {getFieldDecorator('name')(
         <Input 
             onChange={val=>{
                 setFieldsValue({name:val+'@example.com'})
             }}
         />
      )}
</Form.Item>
...

這樣你會發(fā)現(xiàn)一直報錯,之前沒有寫onChange的時候,修改Input值也沒有專門給其值set value,那么說明form監(jiān)測到change的時候默認(rèn)修改了值,那么先給個延遲試下:

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

這樣就可以了,但是會render兩次,說明form確實在我手寫的onChange事件之后又執(zhí)行了內(nèi)部的setFieldsValue,故將我加的setFieldsValue覆蓋了,加了延遲之后,強制讓我手動加的執(zhí)行時間放在了內(nèi)部setFieldsValue事件之后了,這樣我手動加的事件就會覆蓋原內(nèi)部的事件,但其實現(xiàn)在問題并沒有得到解決,因為render兩次肯定是無法接受的,然后找文檔發(fā)現(xiàn)了一個api

...
 <Form.Item>
      {getFieldDecorator('name', {
         getValueFromEvent: val => {
                // 進(jìn)行你想要的操作
                return val+'@example.com';
         }
      })(
         <Input />
      )}
</Form.Item>
...

這樣就完美解決啦!


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容