reactjs - 一起使用 react.useEffect 和 mobx.autorun

标签 reactjs react-hooks mobx-react

在带有 React 文档的 MobX 中,在 Side effects and observables 中部分有一个响应内部更改的收据 useEffect钩。

import React from 'react'
import { autorun } from 'mobx'

function useDocumentTitle(store: TStore) {
  React.useEffect(
    () =>
      autorun(() => {
        document.title = `${store.title} - ${store.sectionName}`
      }),
    [], // note empty dependencies
  )
}

该示例结合了 React.useEffectmobx.autorun (但它可能是 mobx.reaction ),但我看不到 autorun 的好处在代码中。一旦我们进入useEffect我们可以在依赖项数组中跟踪我们的依赖项。代码更清晰,不用dispose()useEffect有一个明确的依赖数组,需要什么。
import React from 'react'
import { autorun } from 'mobx'

function useDocumentTitle(store: TStore) {
  React.useEffect(() => document.title = `${store.title} - ${store.sectionName}`
  ,[store.title, store.sectionName])
}

是否有任何理由遵循给定的示例?

这是一个 Code Sandbox

最佳答案

autorun创建一个观察者,这意味着它将监视 store.title 中的任何变化。和 store.sectionName ,并在更改时自动运行。
useEffect 中进行设置确保 autorun观察者仅创建一次,并在卸载组件时删除。
你的第二个例子没有 autorun可能仍会更新标题 如果父组件中有观察者 触发重新渲染(自身及其子组件,包括此组件)。但是,如果您不遵守 store.titlestore.sectionName在父组件中,您需要在该组件中观察它,并且 autorun是一个很好的方法。

关于reactjs - 一起使用 react.useEffect 和 mobx.autorun,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58306057/

相关文章:

reactjs - 如何让不可见的react-google-recaptcha、Formik和yup协同工作?

javascript - 如何在 React 中查找数组中的项目

javascript - 等待 window.location.href?

css - 在 React 中再次触发动画时重置动画(使用钩子(Hook))- 滑动文本

javascript - 为什么我们不能在 mobx-react 中使用 React.useMemo 来保留对状态对象的引用?

reactjs - Mobx-react 控制台警告相关观察者

javascript - JavaScript/React 中的构造函数是必需的吗?

reactjs - 无法从 react 钩子(Hook)状态获取值

reactjs - 自定义钩子(Hook)重置为其初始状态

reactjs - React Mobx - 商店更改后组件未更新