【问题标题】:How do I hide/unhide React link without refreshing my webpage?如何在不刷新网页的情况下隐藏/取消隐藏 React 链接?
【发布时间】:2020-07-27 10:21:11
【问题描述】:

我在 Header 中创建了 4 个链接。 主页、待办事项、登录、注销。 这就是我想要的东西

  1. 主页、待办事项和注销链接仅在用户登录时可用。

我已经使用 sessionStorage 来检查用户是否已登录并且它工作正常。问题是登录后我需要刷新网页以取消隐藏主页、待办事项和注销。如何在不刷新网页的情况下取消隐藏它们。意味着在我登录后我仍然需要刷新我的页面,我不喜欢那样。这是我的代码示例

class AuthenticationService {
      successLogin(username, password) {
        console.log("Register Successfull");
        sessionStorage.setItem("authenticatedUser", username);
      }
      successLogout() {
        sessionStorage.removeItem("authenticatedUser");
      }
      isUserLoggedIn() {
        let user = sessionStorage.getItem("authenticatedUser");
        if (user === null) {
          return false;
        } else {
          return true;
        }
      }
    }
    export default new AuthenticationService();

Header.js

import React, { Component } from "react";
import { Link } from "react-router-dom";
import AuthenticationService from "../Security/AuthenticationService";

class Header extends Component {
  render() {
    const isUserLoggedIn = AuthenticationService.isUserLoggedIn();
    console.log(isUserLoggedIn);
    return (
      <header>
        <nav className="navbar navbar-expand-md navbar-dark bg-dark">
          <ul className="navbar-nav">
            {isUserLoggedIn && (
              <li>
                <Link className="nav-link" to="/welcome/jarvis">
                  HOME
                </Link>
              </li>
            )}
            {isUserLoggedIn && (
              <li>
                <Link className="nav-link" to="/todos">
                  Todos
                </Link>
              </li>
            )}
          </ul>
          <ul className="navbar-nav navbar-collapse justify-content-end">
            {!isUserLoggedIn && (
              <li>
                <Link className="nav-link" to="/login">
                  Login
                </Link>
              </li>
            )}
            {isUserLoggedIn && (
              <li>
                <Link
                  className="nav-link"
                  to="/logout"
                  onClick={AuthenticationService.successLogout}
                >
                  Logout
                </Link>
              </li>
            )}
          </ul>
        </nav>
      </header>
    );
  }
}

export default Header;

登录成功

loginResponse = () => {
    if (this.state.username === "jarvis" && this.state.password === "jarvis") {
      this.setState({ loginStatus: true });
      AuthenticationService.successLogin(
        this.state.username,
        this.state.password
      );
      this.props.history.push(`/welcome/${this.state.username}`);
    } else {
      this.setState({ loginStatus: false });
    }
  };

【问题讨论】:

    标签: javascript reactjs react-router session-storage react-link


    【解决方案1】:

    通过读取状态设置isUserLoggedIn,不要直接访问AuthenticationService

    【讨论】:

    • constructor(props) { super(props); this.state = { isUserLoggedIn: AuthenticationService.isUserLoggedIn(); }; } 对吗?
    • 不,因为登录后不会改变。您已经有设置问题状态的代码。
    • 能否请您发给我演示代码,因为我是新反应,我不知道该怎么做?
    猜你喜欢
    • 2012-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-15
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    相关资源
    最近更新 更多