как отключить кнопку «Назад» только в том случае, если и только если предыдущее имя пути маршрутизатора «Вход» в React

#javascript #reactjs #react-router

Вопрос:

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

введите описание изображения здесь

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

     const handleGoBack = () => {
      if (authStatus) {
            window.history.pushState(null, null, location.href);
            window.onpopstate = function (event) {
            window.history.go(1);
          };
         return window.history.back()
       };
     };
 

Я сомневаюсь, что такая вещь существует, но я хочу что-то в этом роде

      const handleGoBack = ( e, authStatus ) => {
       if(previouseRouter === 'login')
          return authStatus amp;amp; event.currentTarget.disabled === true
     }
 

есть ли лучший способ решить проблему.., а также я использую Hashrouter

Ответ №1:

Вместо того , чтобы проверять, был ли предыдущий маршрутизатор Login , вы могли перейти от входа на следующую страницу с помощью history.replace("path/to/next/page") . Таким образом, вы заменяете историю последней навигации, и возврат не попадает на страницу входа в систему.

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

1. Я получаю эту ошибку Warning: Cannot update a component ( При ) while rendering a different component ( входе в систему ). To locate the bad setState() call inside , follow the stack trace as described in https://reactjs.org/link/setstate-in-render

2. @Chirume Да, я понимаю вашу проблему, но без кода действительно трудно сказать, в чем проблема. Не могли бы вы опубликовать некоторые Login и Dispenseware компоненты кода?

3. мой код слишком сложен, но я понимаю концепцию, лежащую в его основе, хотя большое спасибо. если я не ошибаюсь, это то же самое, что показано здесь

4. Мне удалось устранить ошибку обновления компонента во время рендеринга, передав сообщение в history.replace('path/to/next/page') качестве обратного вызова authenticate(loginDetails, () => history.replace('/'));