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

时间:2020-10-04 21:27:02

标签: reactjs mobx mobx-react-lite

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

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

  1. MobX的性能降低吗?
  2. 甚至有可能用MobX彻底摆脱它们吗?
  3. UI组件是否也只能在MobX上中继(例如,设置加载布尔值或布尔值以切换模式可见性)?

此外,我读过useContext不应用于频繁更新。但是,MobX实际上经常与该钩子一起使用(谈论mobx-react-lite)。因此,使用MobX进行UI更新甚至是个好主意吗?

1 个答案:

答案 0 :(得分:2)

首先,您实际上并不需要那些钩子。

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

  • useCallback-类似于函数的useMemo,同样,您可以声明函数而无需将其包装在useCallback函数中。

从React useMemouseCallback

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

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

在99%的情况下,这些挂钩用于优化,它们与MobX或Redux无关,您完全不能使用它们。 除非您有一个非常特殊的用例,否则StackOverflow中的其他问题都建议您使用它们。

我个人讨厌redux,起初听起来不错,但比您意识到它是一个持续维护的大怪物。

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

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

它称为react-spear

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