我可以在 React 中使用 MobX 完全摆脱 useCallback 和 useMemo 吗?

Can I totally get rid of useCallback and useMemo with MobX in React?

目前,我正在使用 Redux 和上面提到的钩子来进行 React 项目。但是,在我看来,useMemouseCallback 会很快导致错误(棘手的错误)。据我了解,需要这些挂钩来避免不必要的组件重新渲染,因为 React 正在检查引用相等性。

我想摆脱上面提到的钩子,让 MobX 处理所有响应式的东西。我想知道我是否可以完全摆脱它们 (useCallback, useMemo),因此一切都会自动更新。

  1. MobX 的性能是否较慢?
  2. 是否有可能使用 MobX 完全摆脱它们?
  3. UI 组件是否也只能在 MobX 上中继(例如,设置加载布尔值或用于切换模式可见性的布尔值)?

另外,我读到useContext不应该用于高频更新。不过,MobX 确实经常和 hook 一起使用(说的mobx-react-lite)。那么使用 MobX 进行 UI 更新是个好主意吗?

首先你并不真的需要那些钩子。

  • useMemo - 用于懒惰值,如果您决定放弃它并简单地获取您的值,则不会发生任何事情。

  • useCallback - 就像函数的 useMemo 一样,你可以声明一个函数而不用将它包装在 useCallback 函数中。

来自 React useMemo and useCallback

You may rely on useMemo as a performance optimization, not as a semantic guarantee.

useCallback(fn, deps) is equivalent to useMemo(() => fn, deps).

对于 99% 的情况,这些钩子用于优化,它们与 MobX 或 Redux 无关,你可以简单地不使用它们。 除非你有一个非常具体的用例,Whosebug 中的其他问题建议你使用它们。

我个人讨厌 redux,一开始听起来不错,但你会意识到持续维护它是一个巨大的怪物。

MobX 采用另一种方法来管理您的应用程序的全局状态,一开始听起来也不错,但随后您会深入研究并通过调整 useState 来触发 forceRender 并使用一些带有可观察包装函数组件的巫术来查看实现。

这就是为什么我最近创建了一个简单的 React 状态管理包,在我看来,它太简单了,难以理解维护和扩展(我在几个大型应用程序中使用了这种模式)

叫做react-spear

我非常希望听到任何关于它的想法,我认为这种方法使全局状态管理变得非常容易。