javascript - 我的重定向在单击注销时不起作用

标签 javascript reactjs

当用户单击注销按钮时,它会从本地存储中清除 token ,也会将状态更改为注销,但它不会重定向到我想要的,因为它单击按钮会重定向到登录页面。

import React, { Component } from "react";
import "./Logout.module.css";
import * as action from '../../store/actions';
import { connect} from 'react-redux';
import { Redirect } from 'react-router';



class Logout extends Component {
   constructor(props) {
       super(props);
       this.state = {
           loggedOut:false,
           redirect:null
       };
   }
   handleSubmit =  event => {
       event.preventDefault();
       this.props.onAuth( this.state);
   };
   componentWillReceiveProps(nextProps) {
       if(nextProps!== this.props){
           if(nextProps.loggedOut){
               this.setState({
                   redirect: <Redirect to='/login' />
               })
           }
       }
   }
   render() {
       return (
           <form onSubmit={this.handleSubmit}>
               {this.state.redirect}
               <button type="submit">LOGOUT</button>
           </form>
       );
   }
}
const mapStateToProps = state => {
   return {
       loggedOut: state.loggedOut
   }
}
const  mapDispatchToProps = dispatch =>{
   return{
       onAuth:() =>dispatch(action.logout())
   };
};

export default connect(mapStateToProps,mapDispatchToProps) (Logout);

最佳答案

您只需更改 if声明。

componentWillReceiveProps(nextProps) {
       if(nextProps.loggedOut && nextProps.loggedOut!== this.props.loggedOut){
           this.setState({
               redirect: <Redirect to='/login' />
           })
       }
   }

此外,仅供引用,您应该停止使用 componentWillReceiveProps钩子(Hook)改为使用 componentDidUpdate并检查 prevProps 。了解已弃用的生命周期 Hook Here

componentDidUpdate(prevProps) {
       if(prevProps.loggedOut && prevProps.loggedOut!== this.props.loggedOut){
           this.setState({
               redirect: <Redirect to='/login' />
           })
       }
   }

使用 withRouter 会好得多和history.push而不是<Redirect to={"/"} />

关于javascript - 我的重定向在单击注销时不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58691878/

相关文章:

reactjs - 如何在页面刷新时加载所选语言

javascript - Next.js : Refresh page after modifying a file, 无需重新运行 'npm run'

javascript - 使用字典将返回的状态映射到选择下拉列表以进行过滤,会产生我试图删除的重复项并将唯一键附加到

javascript - 如何在javascript中检索id以td_开头的所有td

javascript - 创建动态全屏和最小化 Div 函数

javascript - 按字母顺序排序功能 Sublime Text 3

javascript - 构建 Angular 项目后图像未显示

javascript - 无法解析提示的值

reactjs - 如何添加覆盖单个组件(例如 Paper 而不是整个屏幕)的背景幕

javascript - 在状态构造函数中使用 PropsFromState 的值