運用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)//觸發映射
},[])
有別的處理方式也可以給我推薦一下~
