我该如何解决无法读取reactjs单页应用程序中未定义的属性“ includes”?

Hatpe123

我正在尝试检查角色,如果该角色是管理员角色,则显示角色admin,否则显示成员。它显示了一个无法读取属性的错误,我可能知道我的错误以及如何解决该错误。这是我的代码:

    import React, { Component } from "react";
    import { BrowserRouter as Router, Switch, Route, Link } from "react-router-dom";
    import "bootstrap/dist/css/bootstrap.min.css";
    import "./App.css";

    import AuthService from "./services/auth.service";

    import Login from "./components/login.component";
    import Register from "./components/register.component";
    import Home from "./components/home.component";
    import Profile from "./components/profile.component";
    import BoardUser from "./components/board-user.component";
    import BoardModerator from "./components/board-moderator.component";
    import BoardAdmin from "./components/board-admin.component";

    class App extends Component {
      constructor(props) {
        super(props);
        this.logOut = this.logOut.bind(this);

        this.state = {
          showModeratorBoard: false,
          showAdminBoard: false,
          currentUser: undefined
        };
      }

      componentDidMount() {
        const user = AuthService.getCurrentUser();
        if (user) {
          this.setState({
            currentUser: AuthService.getCurrentUser(),
             showModeratorBoard: user.roles.includes("admin"),
             showAdminBoard: user.roles.includes("member")

          });
        }
      }

      logOut() {
        AuthService.logout();
      }

      render() {
        const { currentUser, showModeratorBoard, showAdminBoard } = this.state;

        return (
          <Router>
            <div>
              <nav className="navbar navbar-expand navbar-dark bg-dark">
                <Link to={"/"} className="navbar-brand">
                  bezKoder
                </Link>
                <div className="navbar-nav mr-auto">
                  <li className="nav-item">
                    <Link to={"/home"} className="nav-link">
                      Home
                    </Link>
                  </li>

                   {showModeratorBoard && (
                    <li className="nav-item">
                      <Link to={"/mod"} className="nav-link">
                        Moderator Board
                      </Link>
                    </li>
                  )}

                  {showAdminBoard && (
                    <li className="nav-item">
                      <Link to={"/admin"} className="nav-link">
                        Admin Board
                      </Link>
                    </li>
                  )} 

                  {currentUser && (
                    <li className="nav-item">
                      <Link to={"/user"} className="nav-link">
                        User
                      </Link>
                    </li>
                  )}
                </div>

                {currentUser ? (
                  <div className="navbar-nav ml-auto">
                    <li className="nav-item">
                      <Link to={"/profile"} className="nav-link">
                        {currentUser.username}
                      </Link>
                    </li>
                    <li className="nav-item">
                      <a href="/login" className="nav-link" onClick={this.logOut}>
                        LogOut
                      </a>
                    </li>
                  </div>
                ) : (
                  <div className="navbar-nav ml-auto">
                    <li className="nav-item">
                      <Link to={"/login"} className="nav-link">
                        Login
                      </Link>
                    </li>

                    <li className="nav-item">
                      <Link to={"/register"} className="nav-link">
                        Sign Up
                      </Link>
                    </li>
                  </div>
                )}
              </nav>

              <div className="container mt-3">
                <Switch>
                  <Route exact path={["/", "/home"]} component={Home} />
                  <Route exact path="/login" component={Login} />
                  <Route exact path="/register" component={Register} />
                  <Route exact path="/profile" component={Profile} />
                  <Route path="/user" component={BoardUser} />
                  <Route path="/mod" component={BoardModerator} />
                  <Route path="/admin" component={BoardAdmin} />
                </Switch>
              </div>
            </div>
          </Router>
        );
      }
    }

    export default App;

它显示错误为无法读取未定义的属性“包含”

if (user) {
  31 |   this.setState({
  32 |     currentUser: AuthService.getCurrentUser(),
> 33 |      showModeratorBoard: user.roles.includes("admin"),
     | ^  34 |      showAdminBoard: user.roles.includes("member")
  35 |      
  36 |   });

谢谢!!

宫殿

您可以使用对象分解rolesuser对象获取属性值,然后将默认值设置roles为空字符串,这样,如果roles未定义,则角色值将设置为默认值,''例如:

if (user) {
  const { roles = '' } = user;
  this.setState({
    currentUser: AuthService.getCurrentUser(),
    showModeratorBoard: roles.includes("admin"),
    showAdminBoard: roles.includes("member")    
  });
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何解决无法读取Node.js应用程序中未定义的属性'push'?

React-TypeError:无法读取未定义的属性“ includes”

JavaScript错误:无法读取未定义的属性“ includes”

我如何解决无法读取未定义的属性“通道”

如何制作_.includes方法

如何解决无法读取 React js 中未定义错误的属性“map”?

对象实例的未定义方法“ includes”

Array.includes() 返回未定义

如何解决无法读取未定义的属性“ next”?

如何解决无法读取未定义错误的属性“ timepicker”

如何解决无法读取“某物”未定义的属性

AWS Lambda:函数已成功创建,但创建触发器时发生错误:无法读取未定义的属性“ includes”

如何在React Native中修复“ _filePath.includes不是函数。(在'_filePath.includes('&')中,'_ filePath.includes'未定义)”?

我该如何解决Uncaught TypeError:无法读取未定义的属性'value'

类型错误:无法读取未定义的属性“then”---我该如何解决这个问题?

未定义的属性:/opt/.../wp-admin/includes/plugin-install.php中的stdClass :: $ name

类型“ Observable <IProduct []>”中缺少属性“ includes”

如何解决Bootstrap node.js应用程序中的错误“无法设置未定义的属性'emulateTransitionEnd'”?

如何在 JavaScript 中实现 .includes

未捕获的TypeError:无法读取reactjs应用程序中未定义的属性'map'

在程序COPY期间不会复制INCLUDEs

如何使用.includes按多个值过滤?

vue.js中的.includes()和.filter()

在C / C ++中检测多余的#includes?

.includes()在Internet Explorer中不起作用

Javascript .includes()在IE中不起作用

.includes()检查提示中的关键字

.includes方法在js中始终为true

Array.prototype.includes中的错误?