form.setFieldsValue不會觸發change事件,自行觸發


運用antd的form.setFieldsValue不會觸發控件綁定的change事件,需要自行觸發。

我的解決方案是,定義一個對象用來表示field字段值改變和其觸發change事件的映射關系,

然后在執行form.setFieldsValue后觸發遍歷映射對象執行相應change方法,形如:

 import { isEmpty } from 'lodash'

 const nameChange = (o) => {
    console.log(o)
  }
 const ageChange = (o) => {
    console.log(o)
  }
 //key:字段名,value:字段映射的change方法
 const changeMap = {
    name:nameChange,
    age:ageChange,
 }
  /** 
  /** 
 * 此方法旨在調用form.setFieldsValue時無法觸發控件的change事件,遍歷映射對象,手動觸發對應change
 * @param obj 傳給setFieldsValu的對象 
 * @param changeMap 控件值改變所對應的唯一change映射 
 */ 
  const triggerChange = (obj, changeMap)=>{ 
    if (isEmpty(obj)||isEmpty(changeMap)) return '' 
    let keys = Object.keys(obj) 
    for(let i in changeMap){ 
      if(!(keys.indexOf(i)<0)){ 
        changeMap[i](obj[i]) 
      } 
    } 
  }
  useEffect(()=>{
    let obj = { 
      name:'石樂志', 
      age:'18' 
    } 
    form.setFieldsValue(obj) //表單設置值
    triggerChange(obj,changeMap)//觸發映射
  },[])

有別的處理方式也可以給我推薦一下~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM