如何实现注销操作功能返回登录页面?

时间:2020-01-22 20:10:47

标签: javascript reactjs redux react-redux react-router

我对注销功能的实现有疑问。

您可能会在codesandbox中看到,我的应用程序的外观如下:https://sit9d.csb.app/login

这是Logout.js代码,我想我可能会在其中编辑它:

import React, { Component } from 'react'
import { connect } from 'react-redux'
import { setAuthedUser } from '../actions/authedUser'

class Logout extends Component {
    componentDidMount() {
        this.props.setAuthedUser(null)
    }

    render() {
        return<div>Logging out...</div>
    }
}

export default connect(
    null,
    { setAuthedUser }
)(Logout)

这是导航栏Menu.js:

import React, { Component } from 'react'
import { NavLink } from 'react-router-dom'
import { connect } from 'react-redux'
import { Image } from 'semantic-ui-react'

class Menu extends Component {
    render() {
        const { users, authedUser } = this.props
        const { name, avatarURL } = users[authedUser]

        return (
            <div className='ui fixed inverted menu'>
                <div className='ui container'>
                    <div className='item' />
                    <NavLink
                        to='/'
                        exact
                        className='header item'
                        activeClassName='active'
                    >
                        <Image
                            src='/would-you-rather.png'
                            style={{ width: '50px', marginRight: '5px' }}
                         />
                         Home
                    </NavLink>
                    <NavLink to='/add' exact className='item' activeClassName='active'>
                        New Question
                    </NavLink>
                    <NavLink
                        to='/leaderboard'
                        exact
                        className='item'
                        activeClassName='active'
                    >
                        Leader Board
                    </NavLink>
                    <div className='ui right floated item'>
                        <span style={{ marginRight: '10px' }}>Hello, {name}</span>
                        <img className='ui avatar image' src={avatarURL} alt='' />
                    </div>
                    <NavLink to='/logout' exact className='item' activeClassName='active'>
                        Logout
                    </NavLink>
                </div>
            </div>
        )
    }
}

const mapStateToProps = (state) => {
    return { authedUser: state.authedUser, users: state.users }
}

export default connect(mapStateToProps)(Menu)

我想知道如何实现注销功能回到登录身份验证页面?

请提供任何帮助,谢谢。

致谢。

1 个答案:

答案 0 :(得分:2)

最简单的方法是在this.props.history.push('/login')中重置用户后立即使用componentDidMount

historyLogout.js提供给react-router-dom,因为它是路由组件。

import React, { Component } from 'react'
import { connect } from 'react-redux'
import { setAuthedUser } from '../actions/authedUser'

class Logout extends Component {
    componentDidMount() {
        this.props.setAuthedUser(null)
        this.props.history.push('/login')
    }

    render() {
        return<div>Logging out...</div>
    }
}

export default connect(
    null,
    { setAuthedUser }
)(Logout)