问题描述
如果我必须从多个不同原子设置状态作为用户正在采取的某些高级操作的一部分,我希望任何受影响原子的所有订阅组件仅在整个状态设置为一个时重新渲染一次批。 Recoil 可以做到这一点吗?
解决方法
默认情况下,Recoil 批量更新状态(对于 React 状态本身也是如此)。如果您不想明智地批量更新代码,您可以使用 useRecoilCallback
钩子,如下所示:
const Component = () => {
const batchUpdates = useRecoilCallback(({set}) => (valueA,valueB) => {
set(atomA,valueA);
set(atomB,valueB);
},[]);
return (
<button onClick={() => batchUpdates(someValueA,someValueB)}>Batch Updates</button>
);
};