【问题标题】:Can I totally get rid of useCallback and useMemo with MobX in React?我可以在 React 中用 MobX 完全摆脱 useCallback 和 useMemo 吗?
【发布时间】:2021-01-19 19:32:30
【问题描述】:

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

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

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

另外,我读到useContext 不应该用于频繁更新。但是,MobX 确实经常与钩子一起使用(谈论mobx-react-lite)。那么使用 MobX 进行 UI 更新是不是一个好主意?

【问题讨论】:

    标签: reactjs mobx mobx-react-lite


    【解决方案1】:

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

    • useMemo - 用于惰性值,如果你决定放弃它并简单地获得你的价值,什么都不会发生。

    • useCallback - 就像函数的 useMemo 一样,您可以再次声明一个函数,而无需将其包装在 useCallback 函数中。

    来自 React useMemouseCallback

    您可以依赖 useMemo 作为性能优化,而不是语义保证。

    useCallback(fn, deps) 等价于 useMemo(() => fn, deps)。

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

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

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

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

    它被称为react-spear

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

    【讨论】:

    • IMO 我永远不会喜欢一个不知名的小型图书馆,而不是一个经过数千人使用的经过实战考验的图书馆。
    猜你喜欢
    • 1970-01-01
    • 2022-12-23
    • 2019-11-18
    • 1970-01-01
    • 2022-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多