setState中直接参数和回调之间有什么区别?
我听说React调度程序仅在使用回调时正确公开组件更新。这样他们就敲了16ms
const [state, setState] = useState(null)
function handle() {
setState(true)
// or
setState(() => true)
}
答案 0 :(得分:2)
使用回调形式,即使状态尚未呈现,也可以使用状态中的先前值。例如:
instance.run_callbacks(:save) # => false
最终只会使const [counter, setCounter] = useState(0);
const someHandler = () => {
setCounter(counter + 1);
setCounter(counter + 1);
}
增加1,因为处理程序运行时范围内的counter
来自单个渲染。这就像做counter
,所以setCounter(1); setCounter(1)
最终是1,而不是2。
使用回调表单可以使用以前的状态:
counter
将setCounter(counter => counter + 1);
setCounter(counter => counter + 1);
适当增加2,而不仅仅是1。
另一个区别是使用回调形式可以使功能进入状态:
counter
将导致立即调用该函数,而不是设置状态。解决方案是从回调中返回函数:
const [fn, setFn] = useState();
const fnToPutInState = () => {
console.log('fn');
};
// ...
setFn(fnToPutInState);