#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();
Я надеюсь, что это также поможет кому-то еще!