Как реализовать перехват для componentDidMount с помощью react-router?

#reactjs #react-router #react-hooks

#reactjs #react-router #реагирующие перехваты

Вопрос:

Я пытаюсь реализовать useEffect для моего componentDidMount, но я не знаю, как это сделать в данном случае:

  componentDidMount() {
    logNavego(this.props.history.location.pathname   
    this.props.history.location.search )
    this.unlisten = this.props.history.listen(location => {
      logNavego(location.pathname   location.search)
    })
  }
  

Ответ №1:

Попробуйте это.

 import React, { useEffect } from 'react';

useEffect(() => {
  // all your code that you put in  componentDidMount method
}, [])
  

в useEffect мы используем [] . это [] похоже на componentDidMount.

Теперь, если вы хотите использовать componentDidUpdate, вам нужно передать состояние в [] .

например. если в данный момент количество обновлений равно, вы хотите что-либо изменить, тогда посмотрите этот код.

 useEffect(() => {
  // all your code goes here related to count state.
}, [count])
  

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

Ответ №2:

Поскольку вы хотите вызывать history.listen только при первоначальном рендеринге и очищать прослушиватель при размонтировании, вы можете вызвать useEffect with empty array в качестве массива зависимостей и вернуть функцию очистки

 useEffect(() => {
    logNavego(props.history.location.pathname   props.history.location.search )
    const unlisten = props.history.listen(location => {
      logNavego(location.pathname   location.search)
    });
    return () => {
       unlisten();
    }
  }, [])
  

Вы можете обратиться к useEffect документам для получения более подробной информации