Управление пользовательской историей - PullRequest
1 голос
/ 04 апреля 2019

Представьте, что у нас в приложении 2 типа потоков :

  1. Страница A → WizardStep1 → WizardStep2 → WizardStep3 → PageB
  2. PageC → PageD → WizardStep1 → WizardStep2 → PageD

В 1-м потоке мы перенаправляем пользователя на другую страницу. Обратите внимание - во втором потоке мы возвращаемся к исходной странице PageD.

Каждый шаг страницы и мастера является отдельным компонентом и имеет свой собственный URL . Естественно, когда мы нажимаем кнопку возврата браузера, мы возвращаемся назад в историю браузера.

Требования:

  • Когда мы нажимаем на любой шаг мастера, мы делаем один шаг назад - это нормальное поведение (например, из WizardStep3 обратно в WizardStep2)
  • но однажды Мастер завершен, мы не можем вернуться к мастеру

Позвольте мне попытаться объяснить это по-другому:

1. PageA → [ WizardStep1 → WizardStep2 → WizardStep3 ] → PageB

все в квадратных скобках - это процесс , и как только мы закончили с ним, мы не сможем вернуться к этому процессу снова, мы должны его пропустить. Но если мы не завершили волшебника, мы можем вернуться.

Для потока 2 это больше похоже на

2. PageC → PageD <-> [ WizardStep1 → WizardStep2 ]

Проблема

Пользователь на PageB щелкает браузер назад и ожидает увидеть PageA, но мы переходим к предыдущему шагу WizardStep3 (для потока 1)

Пользователь на PageD после завершения работы мастера нажимает назад и ожидает увидеть PageC, но мы возвращаемся к мастеру.

Мои первоначальные мысли

Кстати, я использую страницу A, B, C, D. Чтобы сделать его более реальным, представьте, что пользовательский поток 1 заполняет приложение множеством форм, разбитых по шагам. Как только это будет сделано, вы не сможете вернуться и изменить данные. PageA может быть страницей, на которой был запущен мастер. Для потока 2 - представьте себе редактирование профиля, где PageD - это профиль, а PageC - любая предыдущая страница.

Я знаю, что в браузере мы не можем удалить историю, но мы можем посчитать шаг и использовать goBack (-COUNT). Для потока 2 это может работать, а не для потока 1. Поэтому, возможно, мы поддерживаем свою собственную историю, и мы открываем и отправляем туда URL-адреса, и каждый раз, когда пользователь нажимает на браузер, мы используем нашу собственную историю и всегда используем history.push для браузера, но я не уверен, что windown.onpopstate достаточно надежен.

1 Ответ

1 голос
/ 04 апреля 2019

Я не могу добавить комментарии, поэтому отвечаю.

Я не проверял это, но, по-видимому, в React Router есть метод history.go (n), который можно использовать, чтобы вернуться n раз (например, -3)

https://github.com/ReactTraining/react-router/blob/master/packages/react-router/docs/api/history.md

Я надеюсь, это то, что вы ищете

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