父组件在一个函数中接收三个子组件的回调,将三个回调接收的值作为一个对象存储起来,初始化的时候都会触发,现在只能保存最后一次回调的值,react
将三次setstate
合并了,这种情况怎么处理
// 父组件
const [obj , setobj] = useState({})
function cb(name, value) {
const data = {...obj}
data[name] = value
setobj(data)
}
<A change={cb}/>
<B change={cb}/>
<C change={cb}/>
// A组件
useEffect(() => {
cb &&cb(x, y)
}, [])
// B组件
useEffect(() => {
cb &&cb(a, b)
}, [])
// C组件
useEffect(() => {
cb &&cb(e, f)
}, [])
现在父组件只能接收到最后一次的值,求大佬们帮忙!!
setobject的参数是个obj,需要使用function回调来引用之前的值。关键代码:
setobj((prev) => ({...prev, ...data}))
可在线查看输出效果。
另附一张回答该问题用到的工具图,欢迎大家在Segmentfault中使用RunJS。