【发布时间】:2021-03-31 18:24:09
【问题描述】:
我有一个登录页面组件,我想在成功登录后从动作创建者(thunk)重定向。 它似乎有效,但当 URL 正确更改时,页面仍保留在登录页面上。
这里我在action creator中导入要导入的历史:
// helpers/history.js
import { createBrowserHistory } from 'history';
const history = createBrowserHistory();
export default history;
这里是动作创建器的缩短版本:
// actions/session.js
import history from '../helpers/history';
export const login = (formData) => {
return (dispatch) => {
dispatch({type: LOGIN_REQUEST})
return fetch("http://localhost:3001/login", {
...
.then((user) => {
history.push('/live-rewards')
dispatch({
type: LOGIN_REQUEST_SUCCESS
})
})
.catch(err => {
...
这里是组件的缩短版本,用于显示如何调用登录和导入
// containers/LoginForm.js
import React, { Component } from 'react'
import { connect } from "react-redux";
import { Link } from 'react-router-dom'
import { login } from '../actions/session'
class LoginForm extends Component {
...
fetchOnSubmit = (e) => {
e.preventDefault()
this.props.login(this.state)
}
...
const mapDispatchToProps = dispatch => {
return {
login: (credentials) => {
return dispatch(login(credentials))
}
}
}
export default connect(mapStateToProps, mapDispatchToProps)(LoginForm);
这里是 browserRouter 的实现方式:
// index.js
...
<React.StrictMode>
<Provider store={store}>
<App />
</Provider>
</React.StrictMode>
...
// app.js
...
<Router>
<Navbar toggle={toggle} />
<Sidebar isOpen={isOpen} toggle={toggle} />
<Switch>
<Route path='/live-rewards' component={Liverewards}/>
<Route path='/signin' component={Signin}/>
<Route path='/signup' component={Signup}/>
<Route path='/' exact component={Home}/>
</Switch>
</Router>
...
【问题讨论】:
标签: javascript reactjs react-redux redux-thunk browser-history