Javascript React sessionstorage 如果登录更改导航链接

标签 javascript reactjs sessionstorage

我有一个名为loggedIn的sessionstorage变量。

如果它设置为 true (用户已登录),我需要将登录链接更改为:

<li><a href="" onClick('logout()')>Logout</li>

这样我就可以使用注销方法将 sessionStorage 变量更改为 false。

这是当前代码:

class Nav extends React.Component {
constructor(props) {
    super(props);
    this.isLoggedIn = sessionStorage.getItem('isLoggedIn') === 'true';
    this.state = {
      message: 'You are Logged In',
    };

}

logout() {
  sessionStorage.setItem('loggedIn', false);
  // then update changes
}

  render() {
    return (
      <ul>
        <li><a href="#home">Home</li>
        <li><a href="#login">Login</li> // If Not logged in change this to <li><a href="" onClick('logout()')>Logout</li>
        <li></li> // If loggedin the show Message here
      </ul>
    )
  }

我该怎么做?

最佳答案

通过state变量维护用户登录状态,将isLoggedIn变量存储在state中,并根据用户登录情况更新该变量地位。

使用conditional rendering根据 isLoggedIn渲染不同的元素。

另一个变化是定义注销时点击事件的方式,它应该是:

onClick={this.logout}

并在构造函数中绑定(bind)此方法。

检查文档:How to handle events in JSX

这样写:

class Nav extends React.Component {
  constructor(props) {
      super(props);
      this.state = {
        message: 'You are Logged In',
        isLoggedIn: sessionStorage.getItem('isLoggedIn') === 'true'
      };
      this.logout = this.logout.bind(this);
  }

  logout() {
    sessionStorage.setItem('loggedIn', false);

    //here update the state variable

    this.setState({
      isLoggedIn: false
    });
  }

  render() {
    return (
      <ul>
        <li><a href="#home">Home</li>

        {/*use condition here if user is loggedin then render the logout otherwise login button*/}          

        {this.state.isLoggedIn ? 
            <li><a href="" onClick={this.logout}>Logout</li>
          :
            <li><a href="#login">Login</li> 
        }

        <li></li>
      </ul>
    )
  }
}

关于Javascript React sessionstorage 如果登录更改导航链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44824590/

相关文章:

javascript - 使用 React.js 获取数据属性

reactjs - Webpack、React 热重载器和多个条目

HTML 5 - sessionStorage - 值在同一域中的页面重叠

mobile - 在 PhoneGap 中通过 localStorage 的 sessionStorage

jquery - 如何在达到限制后停止 sessionStorage 保存值

javascript - 如何通过索引数组重新排列数组?

javascript - 为什么我无法在 jQuery 中初始化变量?

javascript - 如何使用嵌套 json 中的键创建另一个嵌套 json

javascript - 如何从 javascript 文件向 Yii2 View 传递参数?

javascript - 如果每 3 个包含此语句,则映射 if 语句