Если пользователь переходит к www.example.com/one и нажимает кнопку «Назад», я хочу перенаправить его на www.example.com.
Думаю, это обычная проблема, но решения пока не нашел.





Вы можете попробовать с двумя вариантами: вы можете использовать метод push или метод goBack из истории маршрутизатора. Обычно реквизиты истории доступны, если вы напрямую маршрутизируете компонент через метод Route или передаете реквизиты истории дочернему компоненту и используете его.
Пример кода приведен ниже
this.props.history.push('/') //this will go to home page
or
this.props.history.goBack() //this will go to previous page
Для вашей проблемы вы попробуйте метод push и дадите точный URL-адрес, по которому вы можете двигаться дальше.
Для получения дополнительной информации посетите https://reacttraining.com/react-router/web/api/history
Кнопка возврата в браузере работает с историей ваших маршрутов. Он не будет вызывать вашу программно управляемую маршрутизацию. Это та точка, где мы должны поддерживать стек истории с реагирующим маршрутизатором. Если вы находитесь на маршруте '/', нажмите '/home'. На кнопке возврата браузера появится '/home и вернется к '/'.
Даже если вы реализуете компонент Button для функции возврата и используете реагирующий маршрутизатор history props. Поверьте, вам нужно тщательно управлять своей навигацией, чтобы правильно поддерживать стек истории браузера. Таким образом, он ведет себя так же, как если бы вы нажимали кнопку браузера «Назад» или ваше приложение Button, чтобы вернуться или перейти вперед.
Надеюсь, это будет полезно.
Я нашел решение. Это не красиво, но работает.
class Restaurant extends Component {
constructor(props) {
super(props);
this.props.history.push('/');
this.props.history.push(this.props.match.url);
}
...
Что вы хотите:
Допустим, человек переходит на одну страницу вашего веб-сайта, например: www.yoursite.com/category/books/romeo-and-juliet.
На этой странице вы хотите отобразить кнопку «Назад», которая связывает вас с одним верхним каталогом: www.yoursite.com/category/books/
Это система хлебных крошек, которую мы, как известно, использовали на форумах vBulletin и тому подобном.
Вот простое решение:
let url = window.location.href;
let backButtonUrl = "";
if (url.charAt(url.length - 1) === "/") {
backButtonUrl = url.slice(0, url.lastIndexOf("/"));
backButtonUrl = backButtonUrl.slice(0, backButtonUrl.lastIndexOf("/"));
} else {
backButtonUrl = url.slice(0, url.lastIndexOf("/"));
}
Что он в основном делает: 1. Получите текущий URL из браузера. 2. Проверьте, есть ли в конце ссылки символ «/» (косая черта). а. Если есть: уберите косую черту и удалите все до последней косой черты. б. Если нет: удалите все, последнюю косую черту.
Вы можете использовать {backButtonUrl} в качестве ссылки на кнопку «Назад».
Примечание: это не имеет ничего общего с React Router, историей и т. д. Примечание 2. Предполагая, что вы используете архитектуру ссылок вида www.site.com/word/letter/character.
Если вы хотите использовать его с библиотекой react-router-dom, вам нужно установить переменную url следующим образом:
let url = this.props.match.url;
Версия хуков (React 16.8+):
Минимальная версия.
import { useHistory } from "react-router-dom";
export const Item = () => {
let history = useHistory();
return (
<>
<button onClick = {() => history.goBack()}>Back</button>
</>
);
};
Я почти уверен, что вопрос относится к кнопке возврата в браузере. Зачем разработчикам встраивать свою собственную кнопку «Назад» в приложение, если в браузере она уже есть, я не понимаю.
Да, она работает точно так же, как кнопка возврата в браузере. Однако что, если в браузере нет кнопки «Назад»? Прекрасным примером может служить Progressive Web App. (Не браузер, но)
Не использовать кнопку "Назад" в браузере. Но представьте себе этот сценарий, в котором вы заказываете товар в amazon, и сведения о заказе приходят на вашу электронную почту, как только вы нажимаете на ссылку просмотра сведений о заказе на amazon.com/order/:orderID, а затем, если он нажимает назад он должен перейти на amazon.com, а не на электронную почту. как это сделать?
@HOLLAMUKUNDA в этом случае вы можете просто поместить ссылку на amazon.com.
Это не будет работать с кнопкой возврата в браузере. Я добавил решение для этого в stackoverflow.com/a/66046495/1724285
@AndroidDev Я знаю, что это старый комментарий, но чтобы ответить на ваш вопрос, я использую реакцию для настольных и мобильных приложений.
Сегодня у меня была такая же проблема. У меня в одном из приложений, над которыми я работаю, есть следующий поток:
Я хочу запретить пользователям переходить со страницы «подтверждения платежа» (3) к любым предыдущим шагам в потоке платежей (1 и 2).
Лучше всего не использовать маршруты для управления отображаемым содержимым, а вместо этого использовать состояние. Если вы не можете себе этого позволить, Я нашел два практических способа решения проблемы:
history.push, запишите страницу, которую вы посещаете, в состоянииRoute React-Router. В этом компоненте: Если history.action === "POP" и "history.state.lastVisited === <some page with back navigation disabled>", то вы должны перенаправить своего пользователя на домашнюю страницу с помощью history.replace.location.reload(). Это перезагрузит приложение, и история будет сброшена.Мы хотели что-то подобное для нашего приложения React, и, к сожалению, это было лучшее решение, которое мы придумали. Это особенно полезно, когда наши пользователи используют мобильные устройства и попадают на определенную страницу нашего сайта из рекламы или referrer.
Это наш основной файл routes.tsx.
useEffect(() => {
// The path that the user is supposed to go to
const destinationPath = location.pathname;
// If our site was opened in a new window or tab and accessed directly
// OR the page before this one was NOT a page on our site, then...
if (
document.referrer === window.location.href ||
document.referrer.indexOf(window.location.host) === -1
) {
// Replaces the current pathname with the homepage
history.replace("/");
// Then pushes to the path the user was supposed to go to
history.push(destinationPath);
}
}, []);
Теперь, когда пользователь нажимает кнопку «Назад», пользователь попадает на нашу домашнюю страницу, а не застревает на «вложенном» маршруте, по которому они находились.
ПРИМЕЧАНИЕ: В этой реализации есть некоторые небольшие особенности. Наше приложение также является приложением Кордова, поэтому нам НЕОБХОДИМО иметь собственную кнопку возврата. Эта реализация хорошо работает с нашей собственной кнопкой возврата, но, похоже, не работает с кнопкой возврата в собственном браузере; следовательно, это сработало для наших нужд.
Я не думаю, что кнопка «Назад» должна работать именно так ... Пользователь должен сначала перейти на www.example.com, затем перейти на www.example.com/one и, когда он нажмет кнопку «НАЗАД», вернуться к www.example.com