setState中的直接参数和回调之间有什么区别?

时间:2020-10-14 20:52:56

标签: javascript reactjs

setState中直接参数和回调之间有什么区别?
我听说React调度程序仅在使用回调时正确公开组件更新。这样他们就敲了16ms

const [state, setState] = useState(null)

function handle() { 
   setState(true)
   // or
   setState(() => true)
 }

1 个答案:

答案 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);
相关问题