Как получить статус аутентификации в компоненте react js?

#javascript #reactjs #redux

#javascript #reactjs #redux

Вопрос:

Ниже приведен код компонента react моего проекта. this.props.isAuthenticated работает, когда я возвращаю компонент, но когда я печатаю this.props.isAuthenticated внутри componentDidMount, я получаю false (выход из системы печати). Как мне получить статус аутентификации true или false в компоненте react?

Я уже добавил redux, и выход из системы работает нормально.

 import React, { Component } from "react";
import { NavLink, Route, withRouter } from "react-router-dom";
import NewsListView from "../Container/NewsListView";
import StatsView from "../Container/StatsView";
import VotingView from "../Container/VotingView.js";
import Rightsidebar from "../Container/rightsidebar";
import Footer from "./footer";
import Loginform from "../Container/loginform";
import SignUp from "../Container/SignUp";
import { connect } from "react-redux";
import * as actions from "../Store/actions/auth";

class Header extends React.Component {
  componentDidMount() {
    {
      this.props.isAuthenticated ? console.log("login") : console.log("logout");
    }
  }
  render() {
    return (
      <div>
        <nav className="navbar navbar-inverse">
          <div className="container-fluid">
            <div className="navbar-header">
              <button
                type="button"
                className="navbar-toggle"
                data-toggle="collapse"
                data-target="#myNavbar"
              >
                <span className="icon-bar" />
                <span className="icon-bar" />
                <span className="icon-bar" />
              </button>
              <NavLink className="navbar-brand" to="/">
                Save4thPillar
              </NavLink>
            </div>
            <div className="collapse navbar-collapse" id="myNavbar">
              <ul className="nav navbar-nav">
                <li>
                  <NavLink to="/" className="navlink">
                    Home
                  </NavLink>
                </li>

                <li>
                  <NavLink to="/news" className="navlink">
                    news
                  </NavLink>
                </li>
                <li>
                  <NavLink to="/stats" className="navlink">
                    stats
                  </NavLink>
                </li>
                {this.props.isAuthenticated ? (
                  <li>
                    <NavLink
                      to="/logout"
                      onClick={this.props.logout}
                      className="navlink"
                    >
                      Logout
                    </NavLink>
                  </li>
                ) : (
                  <li>
                    <NavLink to="/login" className="navlink">
                      Login
                    </NavLink>
                  </li>
                )}
              </ul>
            </div>
          </div>
        </nav>
        <div className="container">
          <div className="row">
            <div className="col-md-8">
              <Route exact path="/" component={VotingView} {...this.props} />
              <Route exact path="/news" component={NewsListView} />
              <Route exact path="/stats" component={StatsView} />
              <Route exact path="/login" component={Loginform} />
              <Route exact path="/signup" component={SignUp} />
            </div>
            <div className="col-md-4">
              <Rightsidebar />
            </div>
            <div />
          </div>
          <Footer />
        </div>
      </div>
    );
  }
}

const mapDispatchToProps = dispatch => {
  return {
    logout: () => dispatch(actions.logout())
  };
};

export default withRouter(
  connect(
    null,
    mapDispatchToProps
  )(Header)
);

  

Комментарии:

1. Ваш пользователь или ваш статус в вашем состоянии redux?

2. В состоянии redux я получаю AUTH_SUCCESS с токеном, чтобы пользователь вошел в систему.

Ответ №1:

Вы должны реализовать конструктор компонента заголовка. для использования реквизитов в жизненных циклах

 class Header extends React.Component {
  componentDidMount() {
  {
    this.props.isAuthenticated ? console.log("login") : console.log("logout");
  }

  constructor(props){
    super(props);
  }
  [...]
}