Замена getDerivedStateFromProps на useEffect - PullRequest
1 голос
/ 16 мая 2019

Я преобразовываю компонент класса в компонент функции и хотел посмотреть, может ли useEffect() заменить следующую статическую функцию

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

Ниже приведена новая функция замены.Он делает то, что должен, то есть изменяет состояние в соответствии с реквизитом, но я не слишком знаком с useEffect (), и мне просто интересно, не теряю ли я что-либо, переходя к этому.

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

1 Ответ

1 голос
/ 16 мая 2019

Вы должны проверить документы

Вы можете иметь состояние для предыдущего path и текущего path и вызывать setLoginStatus только тогда, когда они отличаются.

Если вы хотите setLoginStatus(true) только тогда, когда path == 'login', тогда правильное использование useEffect.

Эта часть кода будет работать только при изменении path. И это происходит из-за [ path ].

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

И если вы используете какой-либо маршрутизатор, вероятно, ваш эффект будет работать только при начальном рендере.

Мне просто интересно, не потеряю ли я что-либо, переходя на это.

Нет, все в порядке, это то, как вы должны это сделать

Также взгляните на Возможно, вам не нужно производное состояние

И здесь

...