Реагировать на состояние аутентификации и маршруты.Не удалось выполнить replaceState для History в React-Router - PullRequest
0 голосов
/ 25 октября 2018

Использование пакетов

  "react-router": "^4.3.1",
   "react-router-dom": "^4.3.1",

App.js

class App extends Component {

  constructor(props) {
    super(props);

    this.state = {
      authState: null,
    };
  }

  mutateAuthState = () => {
    this.setState({
       authState: true,
      });
  }
  render() {
    return (<Routes authState={this.state.authState}  mutateAuthState={this.mutateAuthState} />)
    }
}

Routes.js

class Routes extends React.Component {
    render() {
      return (
        <React.Fragment>

            <BrowserRouter >
              <Switch>
                  <Route path="/login" exact render={  () => <Login authState={this.props.authState} 
                                                                    mutateAuthState={this.props.mutateAuthState}/>
                                                     } /> 
                  <Route path="/" exact render={  () => <div><a href="/login" >login</a></div> } />
            </Switch>
      </BrowserRouter>
  </React.Fragment>
      );
    }
  }

Login.js

class Login extends Component {


  handleSubmit = async (event) => {

     this.props.mutateAuthState(true)

 }

  render() {

    switch(this.props.authState) {
      case true : return (<Redirect to="\" />)

       default :    return(
      <button onClick={this.handleSubmit}  >Login </button>

    )
  }
}
}

Требуется конечный результат - при нажатии кнопки входа в Login.js переменная состояния authState в App.js будет иметь значение true.

Приложение перезапустит Routes.js после изменения состояния.

Внутри маршрутов,поскольку URL-адрес по-прежнему / login, компонент Login отображается.

Внутри Login, поскольку this.props.authState теперь имеет значение true, происходит перенаправление на "/".

Но яполучаю DOMException в веб-консоли

Ошибка: DOMException: не удалось выполнить replaceState для «History»: объект состояния истории с URL «http:« не может быть создан в документе с источником »http://localhost:3000' и URL 'http://localhost:3000/login'.

enter image description here

Это правильная архитектура для аутентификации в React?

1 Ответ

0 голосов
/ 12 ноября 2018

Я вижу две вещи.

Разве вы не должны перенаправлять косую черту, а не обратную?

aka изменить <Redirect to="\" /> на <Redirect to="/" />

Во-вторых, вам, вероятно, понадобится обновить версию реакции-маршрутизатора.Проблема в том, что ваш редирект пытается вернуться домой, но есть ошибка при перенаправлении на маршрут /.

Версия 4.6.1 должна правильно перенаправить вас.

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