React useRecoilState (Recoil) - 即使在只需要访问器时不使用状态,它也会 subscribe/render 吗?
React useRecoilState (Recoil) - Does it subscribe/render even if the state isn't used when only needing the accessor?
有时,我们只需要使用共享状态的accessor/mutator(例如:setBlockPickerMenu
)。
const [blockPickerMenu, setBlockPickerMenu] = useRecoilState(blockPickerMenuState);
...
setBlockPickerMenu(null)
而且我们不需要值本身(例如:blockPickerMenu
)。
当我们执行上述操作时,React 内部会发生什么?组件是否订阅了对 blockPickerMenu
的更改,即使我们没有主动使用它?它是否在更改时执行不必要的重新渲染?有没有办法以某种方式优化事情?
上面的示例使用了 Recoil,但我假设它对任何共享状态(Redux 等)的工作方式类似
useRecoilState
calls useRecoilValue
这将隐式订阅组件给定状态。
function useRecoilState(recoilState) {
// ...
return [useRecoilValue(recoilState), useSetRecoilState(recoilState)];
}
所以是的,即使在只需要 setter.
时不使用状态,它也会订阅
如果您只想订阅 setter,请致电 useSetRecoilState(state)
。
I assumed it'd work similarly for any shared state (Redux, etc.)
你不能假设每个库及其实现,例如在 Redux 中,你都不会有这样的用例,因为 setter 和状态通过 useDispatch
和 useSelector
.
有时,我们只需要使用共享状态的accessor/mutator(例如:setBlockPickerMenu
)。
const [blockPickerMenu, setBlockPickerMenu] = useRecoilState(blockPickerMenuState);
...
setBlockPickerMenu(null)
而且我们不需要值本身(例如:blockPickerMenu
)。
当我们执行上述操作时,React 内部会发生什么?组件是否订阅了对 blockPickerMenu
的更改,即使我们没有主动使用它?它是否在更改时执行不必要的重新渲染?有没有办法以某种方式优化事情?
上面的示例使用了 Recoil,但我假设它对任何共享状态(Redux 等)的工作方式类似
useRecoilState
calls useRecoilValue
这将隐式订阅组件给定状态。
function useRecoilState(recoilState) {
// ...
return [useRecoilValue(recoilState), useSetRecoilState(recoilState)];
}
所以是的,即使在只需要 setter.
时不使用状态,它也会订阅如果您只想订阅 setter,请致电 useSetRecoilState(state)
。
I assumed it'd work similarly for any shared state (Redux, etc.)
你不能假设每个库及其实现,例如在 Redux 中,你都不会有这样的用例,因为 setter 和状态通过 useDispatch
和 useSelector
.