javascript - 登录 React-Redux 后无法重定向

标签 javascript reactjs redux react-router react-redux

我对 React 和 Redux 比较陌生,我正在尝试管理登录系统和经过身份验证的路由。我目前有一个登录表单,该表单在提交时调用名为 login 的操作,该操作将 redux 状态更改为 isAuthenticated 设置为 trueuser 设置为任何用户。

我想将用户从他们登录的任何地方重定向回上一页,但是当我登录时,在我有机会将登录表单的状态更改为重定向回引用,组件被卸载。

登录表单和登录 redux 操作的代码如下所示。预先感谢您的帮助。

class LoginForm extends Component {
  constructor(props) {
    super(props);

    this.state = {
        email: '',
        password: '',
        errors: {},
        redirectToReferrer: false
    };

    this.onChange = this.onChange.bind(this);
    this.onSubmit = this.onSubmit.bind(this);
    this.login = login.bind(this);
  }

  onChange(e){
    this.setState({[e.target.name]: e.target.value});
  }

  onSubmit(e) {
    e.preventDefault();

    const post = {
      email: this.state.email,
      password: this.state.password
    }

    this.props.login(post).then(
      (res) => this.setState(() =>{redirectToReferrer: true}),
      (err) => console.log(err)
    )
  }



  render(){
    const { redirectToReferrer } = this.state.redirectToReferrer;
    const { from } = {from: {pathname: '/client/games'}};

    if(redirectToReferrer === true){
      return(
        <Redirect to={from}  />
      )
    }

    return(
      <div>
        <form onSubmit={this.onSubmit}>
          <input type="text" id="email" onChange={this.onChange} name="email" placeholder="Email"/>
          <input type="password" id="password" onChange={this.onChange} name="password" placeholder="Password"/>
          <br />
          <button type="submit" className="submit">Login</button>
        </form>
        <br />
      </div>
    );
  }
}

LoginForm.contextTypes = {
  router: PropTypes.object.isRequired
}


LoginForm.propTypes = {
  from: PropTypes.object.isRequired
}


export default connect(null, { login })(LoginForm);

export function setCurrentUser(token) { //action function to set user from given jwtToken
  return {
    type: SET_CURRENT_USER,
    user: token.user
  }
}

export function login(data) {
  return dispatch => {
    return axios.post('/users/login', data) //post login info to backend
    .then(res => {
      const token = res.data.token; //get the token from the response
      localStorage.setItem('jwtToken', token); //set the jwtToken
      dispatch(setCurrentUser(JWT.decode(token, 'authtoken'))); //dispatch currentUser action with the given decoded token
    })
  }
}

最佳答案

我不完全确定我们使用的是同一个 react-router。但我通常在我的设置中使用推送。

import { push } from "react-router-redux";

export const changeUrl = location => dispatch => dispatch(push(location));

关于javascript - 登录 React-Redux 后无法重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50981468/

相关文章:

javascript - jquery中实例的初始化问题和使用

css - @font-face 仅当字体安装在本地计算机上时才有效

javascript - React - 将函数绑定(bind)到组件时未定义

javascript - 如何在 ReactJS + Redux 中检查数组中的每个对象?

javascript - 不使用 redux 异步更新 redux 形式的初始值

javascript - 滥用 pouchDB 的文档 ID : Get first prefix element

javascript - 从输入设置组件状态

javascript - Typescript 可为 null 的回调

javascript - React-native:tvOS 如何强制聚焦按钮?

reactjs - 无法处理 Uncaught TypeError : Cannot read property 'location' of undefined at createRouterReducer