Перенаправление на предыдущий компонент при нажатии кнопки (реагирующая маршрутизация)

#javascript #reactjs #routes #react-hooks

#javascript #reactjs #маршруты #реагирующие крючки

Вопрос:

У меня есть компонент react, который отображается, когда я нажимаю на пункт меню, на этой странице есть форма для заполнения, и это сделано, при отправке я хочу перенаправить его на компонент, который пользователь нажал ранее.

Я попытался перенаправить его с помощью Redirect, а также с помощью useHistory(), но ни один из них не работает, это то, что я сделал с useHistory():

Текущий URL-адрес, localhost/home/schemes/firstoption и я хочу вернуться к localhost/home/firstoption нему.

Scheme.js:

   let history = useHistory();


<Button
                className="button-dc btn-block top30"
                variant="primary"
                type="submit"
                disabled={enableButton}
              >
                Finish
              </Button>
const onSubmit = async (event) => {
    event.preventDefault();
    event.stopPropagation();
    {...}
    history.push(previousURL);
  };
  const URL = window.location.href;
  const previousURL = URL.split("scheme/").join("");
  previousURL // localhost/home/firstoption
  

Это создает этот URL, но не перенаправляет:

 https://localhost/home/scheme/https://localhost/home/firstoption
  

И я также пытался сделать то же самое, но вместо использования

 history.push(previousURL);
  

Я использовал это:

 return <Redirect to={previousURL} />
  

И это не создает URL-адрес и также не перенаправляет.

Кто-нибудь видит какую-либо ошибку в этом?

Ответ №1:

Для перенаправления вы можете использовать метод push истории

 history.push({
    pathname:'yourpathname',
})
  

Или вы можете просто обернуть свою кнопку ссылкой из react-router-dom :

    import { Link } from 'react-router-dom'

    <Link to="pathname">
    <Button
                    className="button-dc btn-block top30"
                    variant="primary"
                  >
                    Finish
                  </Button>
    </Link>
  

проблема заключается в написанном вами пути, пути, который относится к маршруту домашней страницы приложения, а не к полному URL-адресу

Комментарии:

1. Ссылка добавляет previousURL к текущей, поэтому у меня будет это: localhost/home/scheme/https://localhost/home/firstoption . И я попытался использовать путь следующим образом: history.push({pathname:{previousURL}, }); но это тоже не работает

2. Ссылка связана с URL-адресом приложения (определяется / ) <Link to=»/home/firstoption/’> Имя пути всегда должно быть относительно пути приложения, а не полного URL

Ответ №2:

Я не смог заставить работать ни один из предложенных вариантов, поэтому в итоге я сделал это:

 window.history.pushState({}, null, previousURL); // previousURL = localhost/home/firstoption
location.reload();
  

Я надеюсь, что это также поможет кому-то еще!