В React Hook useEffect отсутствует зависимость: 'props.match.params.id' - PullRequest
0 голосов
/ 02 апреля 2020

Я создал одно приложение React. Для получения данных я использовал топор ios. Мое приложение работает нормально, как и ожидалось. Но в моем терминале я получаю предупреждение вот так Line 34:6: React Hook useEffect has a missing dependency: 'props.match.params.id'. Either include it or remove the dependency array react-hooks/exhaustive-deps. Я не хочу использовать // eslint-disable-next-line react-hooks/exhaustive-deps. Есть ли альтернативное решение?

  useEffect(() => {
    axios
      .get("http://localhost:5000/students/" + props.match.params.id)
      .then(response => {
        setState({
          name: response.data.name,
          birthday: response.data.birthday,
          address: response.data.address,
          zipcode: response.data.zipcode,
          city: response.data.city,
          phone: response.data.phone,
          email: response.data.email
        });
      })
      .catch(function(error) {
        console.log(error);
      });

  }, []);

1 Ответ

2 голосов
/ 02 апреля 2020

Если вы не хотите отключать правило eslint, вам нужно следовать ему, просто добавьте реквизит в ваш массив зависимостей:

  useEffect(() => {
    axios
      .get("http://localhost:5000/students/" + props.match.params.id)
      .then(response => {
        setState({
          name: response.data.name,
          birthday: response.data.birthday,
          address: response.data.address,
          zipcode: response.data.zipcode,
          city: response.data.city,
          phone: response.data.phone,
          email: response.data.email
        });
      })
      .catch(function(error) {
        console.log(error);
      });

  }, [props.match.params.id]);

Это означает, что если идентификатор изменится, ваш эффект будет быть размонтирован и вызван снова, что, кажется, имеет смысл, учитывая, что match.params.id используется внутри вашего эффекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...