Reactjs React中useMemo的用例是什么?

Reactjs React中useMemo的用例是什么?,reactjs,react-hooks,Reactjs,React Hooks,我需要帮助了解何时在React中使用usemohook而不是useState+useffect。从我在S.O.和网站上阅读其他问题后了解到: 使用useState可以创建一个值(可通过setter更改),如果依赖项数组中列出的某些依赖项发生更改,则可以使用useffect执行所需操作。例如,在第一次渲染时,您的组件将使用传递给useState的初始值进行渲染,然后效果将运行,并且您的组件将使用您在效果中使用setter设置的新值重新渲染 使用useMemo可以创建一个值,该值将根据您提供给钩子

我需要帮助了解何时在React中使用
usemo
hook而不是
useState
+
useffect
。从我在S.O.和网站上阅读其他问题后了解到:

  • 使用
    useState
    可以创建一个值(可通过setter更改),如果依赖项数组中列出的某些依赖项发生更改,则可以使用
    useffect
    执行所需操作。例如,在第一次渲染时,您的组件将使用传递给
    useState
    的初始值进行渲染,然后效果将运行,并且您的组件将使用您在效果中使用setter设置的新值重新渲染
  • 使用
    useMemo
    可以创建一个值,该值将根据您提供给钩子的函数进行计算,如果依赖项数组中的某些依赖项发生变化,该值将发生变化。到目前为止,对我来说,它看起来像是
    useState
    +
    useffect
    ,只是您没有设置程序来更改值。在呈现时,如果其中一个依赖项已更改,则将运行useMemo。区别在于:组件将在渲染之前等待计算值(不确定此部分)
据我所知,
usemo
应该用于繁重的操作。但是如果它阻止了组件的渲染,那有什么意义呢?
有人说使用依赖项数组可以避免不必要的更新,但我也可以使用useEffect进行更新,而不会阻塞渲染?如果我没有要渲染的重组件,使用useEffect不是更快吗

谢谢:)

编辑:

我接受了菲利普·费尔德曼的回答,因为它符合我的需要。正如评论中建议的那样,您可以查看全局比较:)

您是正确的,
useffect
作为副作用在渲染后运行。这意味着当您不想阻止渲染循环时,可以使用您的版本

但是,该版本将通过调用setter触发另一个重新加载。
初始绘制时间可能会更快,但您会通过设置新值立即再次阻止渲染循环,在大多数情况下,这应该比直接使用
usemo
要慢。

usemo
通过将返回的值包装在依赖项检查层中,防止不必要地重新处理昂贵的数据。在其中一个DEP更改之前,将不会在渲染中重新处理该值(类似于
useCallback
)。请参见“是”,但对useEffect是否也有依赖性检查?这是否回答了您的问题?我认为它提供了一个很好的比较什么是可能的。我认为这不是复制品。我接受菲利普·费尔德曼的回答。感谢您抽出时间:)