Почему компонент Navigate из библиотеки React Router DOM не перенаправляет на указанный маршрут?

Как можно исправить код для корректной работы редиректа после завершения таймера в обработке страницы 404 с использованием React Router DOM?
  • 24 марта 2024 г. 20:59
Ответы на вопрос 2
Когда компонент Navigate из библиотеки React Router DOM не перенаправляет на указанный маршрут, это может быть вызвано различными причинами, такими как неправильно указанный путь, неправильное использование компонента, или наличие других конфликтующих маршрутов.

Для правильной работы редиректа после завершения таймера в обработке страницы 404 с использованием React Router DOM, можно использовать следующий подход:

1. Добавить компонент Timer, который будет устанавливать таймер и при его завершении выполнять перенаправление на нужный маршрут.
```jsx
import React, { useEffect } from 'react';
import { useHistory } from 'react-router-dom';

const Timer = ({ duration, redirectPath }) => {
  const history = useHistory();

  useEffect(() => {
    const timer = setTimeout(() => {
      history.push(redirectPath);
    }, duration);

    return () => clearTimeout(timer);
  }, [duration, redirectPath, history]);

  return null;
};

export default Timer;
```

2. Использовать компонент Timer в странице 404 для установки таймера и перенаправления после его завершения.
```jsx
import React from 'react';
import Timer from './Timer';

const NotFoundPage = () => {
  return (
    <div>
      <h1>404 - Page not found</h1>
      <Timer duration={3000} redirectPath="/" />
    </div>
  );
};

export default NotFoundPage;
```

Теперь, при переходе на страницу 404, будет установлен таймер длительностью 3 секунды, после чего произойдет автоматическое перенаправление на главную страницу.
<Navigate to="/" /> - Это компонент, при его монтировании будет редирект, а от того что ты его записал в useEffect - толку 0, такая запись jsx - это не монтирование, это просто синтаксис jsx ( это всё равно что ты создал инпут и дал ему пару атрибутов, но вот в доме его не отрисовал ) 

https://reactrouter.com/en/main/hooks/use-navigate
Похожие вопросы