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 和状态通过 useDispatchuseSelector.