私はUserLogin
コンポーネントを持っており、要求を送信し、応答したらAfterLogin
コンポーネントにリダイレクトします。react-router-dom v4プログラマブルにリダイレクト
if (xhr.status === 200) {
// success
this.context.history.push('/dashboard')
}
検索の多くが反応し、ルータ-DOMを私の後にv4のルータは、次のようになります。
import { BrowserRouter as Router, Route, Switch,Redirect} from 'react-router-dom'
import { createBrowserHistory } from 'history';
const history = createBrowserHistory();
<Router forceRefresh={false} history={history}>
<div>
<Switch>
<Route exact path="/" render={() => (
Auth.isUserAuthenticated() ? (
<DashboardPage/>
) : (
<LoginPage/>
)
)}/>
<Route path="/dashboard" render={() => (
Auth.isUserAuthenticated() ? (
<DashboardPage/>
) : (
<Redirect to="/login"/>
)
)}/>
<Route path="/login" render={() => (
Auth.isUserAuthenticated() ? (
<Redirect to="/dashboard"/>
) : (
<LoginPage/>
)
)}/>
<Route path="*" component={Error}/>
</Switch>
</div>
</Router>
すべてがthis.context.history.push('/dashboard')
一部を除いて、完全に正常に動作しています。ログイン後にユーザーをリダイレクトするにはどうすればよいですか?この方法を使用すると、コンソールでthis.context
が定義されていないことがわかります。
Cannot read property 'push' of undefined
あなたは 'this.props.history.push( '/ダッシュボード')'のように、代わりにコンテキストの小道具を使用する必要があります。今どこで 'this.context ... 'と呼んでいますか? – hinok
UserLoginコンポーネントの内部で、ユーザーがフォームを送信し、サーバーからokを取得した後。 –