用 useEffect 替换 getDerivedStateFromProps

Replacing getDerivedStateFromProps with useEffect

我正在将 class 组件转换为函数组件,想看看 useEffect() 是否可以替换以下静态函数

static getDerivedStateFromProps(props) {
    const { path } = props.match;
    if (path === '/login') {
      return { loginStatus: true };
    } else {
      return { loginStatus: false };
    }
  }

以下是新的替换函数。它正在做它应该做的事情,即根据 props 改变状态,但我对 useEffect() 不太熟悉,我只是想知道转换成这个是否不会丢失任何东西。

const { path } = props.match
useEffect(() => {
    if (path ==='/login'){
        setLoginStatus(true)
    } else {
    setLoginStatus(false)
    }
}, [ path ])

你应该检查 docs

您可以为之前的 path 和当前的 path 设置一个状态,并且仅在它们不同时才调用 setLoginStatus

如果在 path == 'login' 时只想 setLoginStatus(true) 那么使用 useEffect 是正确的。

这部分代码只会在path变化时运行。这是因为 [ path ].

useEffect(() => {
    if (path ==='/login'){
        setLoginStatus(true)
    } else {
    setLoginStatus(false)
    }
}, [ path ])

如果您正在使用一些路由器,您的效果可能 运行 仅在初始渲染中。

I'm just wondering if I'm not losing anything by converting to this.

不,没关系,你应该这样做

也看看You Probably Don't Need Derived State

here