【问题标题】:Using if else condition to show elements on RectJS使用 if else 条件在 React JS 上显示元素
【发布时间】:2022-11-17 07:36:38
【问题描述】:

我有一些要根据用户角色显示的菜单项。我有 2 个用户角色来自数据库(1 for admin and 0 for normal user)。但是我的代码总是为普通用户返回菜单项,即使它是登录的管理员。 我还将用户详细信息存储在 useContext 中并在每个组件上调用它们

请帮助

我的代码

import React, { Component } from "react";
import { Link } from "react-router-dom";
import "./Menubar.css";
import { UserContext } from "../../UserContext";

const Menubar = () => {

const user = React.useContext(UserContext);

console.warn(user.role)

return (
<div>
  <div className="appBottomMenu">

    {user.role === 1 ? (
      <Link to="/admin/home" className="item" tabIndex="1">
        <div className="col">
          <i className="fi fi-rr-home"></i>
        </div>
      </Link>
    ) : (
      <Link to="/" className="item" tabIndex="1">
        <div className="col">
          <i className="fi fi-rr-home"></i>
        </div>
      </Link>
    )}

    {user.role === 1 ? (
      <Link className="item" to="/admin/farmers">
        <div className="col">
          <i className="fi fi-rr-users"></i>
        </div>
      </Link>
    ) : (
      <Link to="/area" className="item" tabIndex="1">
        <div className="col">
          <i className="fi fi-rr-marker"></i>
        </div>
      </Link>
    )}

    <Link to="/community" className="item">
      <div className="col">
        <i className="fi fi-rr-browser"></i>
      </div>
    </Link>


    {user.role === 1 ? (
      <Link className="item" to="/admin/farms">
        <div className="col">
          <i className="fi fi-rr-users"></i>
        </div>
      </Link>
    ) : (
      <Link to="/shop" className="item">
        <div className="col">
          <i className="fi fi-rr-shopping-cart"></i>
        </div>
      </Link>
    )}


    <Link to="/profile" className="item">
      <div className="col">
        <i className="fi fi-rr-user"></i>
      </div>
    </Link>
  </div>
</div>

 );}
    export default Menubar;

【问题讨论】:

  • console.warn(user.role)记录了什么?
  • 我只是想用它在控制台上显示用户角色。确实如此。当前用户角色为1,则显示为1
  • 是的,但它在这里很重要 - 只需在此处粘贴 console.log(user.role, typeof user.role) 记录的内容
  • 也许它是一个字符串,因此您的 if 检查将失败并呈现普通用户..如果是这样,请尝试使用 == 而不是 ===
  • 对不起,我看到了别的东西。它记录undefined 'undefined'

标签: javascript reactjs


【解决方案1】:

在上下文更新时强制更新页面的一种潜在方法是结合使用 useEffect 和 useState 挂钩以及 useContext。这是一个示例,希望对您有所帮助。

例如:

import React, { Component, useEffect, useContext, useState } from "react";
import { Link } from "react-router-dom";
import "./Menubar.css";
import { UserContext } from "../../UserContext";

const Menubar = () => {

  const { user } = useContext(UserContext);
  const [menuContext, setMenuContext] = useState(user);

  const handleSetMenuContext = (updatedMenuContext) => {
    setMenuContext(updatedMenuContext);
  };

  useEffect(() => {
    handleSetMenuContext(user);
  }, [user]);

return menuContext?.role && (
<div>
  <div className="appBottomMenu">

    {menuContext.role === 1 ? (
      <Link to="/admin/home" className="item" tabIndex="1">
        <div className="col">
          <i className="fi fi-rr-home"></i>
        </div>
      </Link>
    ) : (
      <Link to="/" className="item" tabIndex="1">
        <div className="col">
          <i className="fi fi-rr-home"></i>
        </div>
      </Link>
    )}

    {menuContext.role === 1 ? (
      <Link className="item" to="/admin/farmers">
        <div className="col">
          <i className="fi fi-rr-users"></i>
        </div>
      </Link>
    ) : (
      <Link to="/area" className="item" tabIndex="1">
        <div className="col">
          <i className="fi fi-rr-marker"></i>
        </div>
      </Link>
    )}

    <Link to="/community" className="item">
      <div className="col">
        <i className="fi fi-rr-browser"></i>
      </div>
    </Link>


    {menuContext.role === 1 ? (
      <Link className="item" to="/admin/farms">
        <div className="col">
          <i className="fi fi-rr-users"></i>
        </div>
      </Link>
    ) : (
      <Link to="/shop" className="item">
        <div className="col">
          <i className="fi fi-rr-shopping-cart"></i>
        </div>
      </Link>
    )}


    <Link to="/profile" className="item">
      <div className="col">
        <i className="fi fi-rr-user"></i>
      </div>
    </Link>
  </div>
</div>
);
}
export default Menubar;

【讨论】:

  • TypeError: Cannot read properties of undefined (reading 'role')。它是在仪表板组件内部调用的菜单组件
  • 更新示例以删除打印 user.role,因为它可能未定义。在看不到仪表板组件或项目提供程序的代码的情况下,关于菜单组件的更改,我无能为力。这是提供程序设置示例:codesandbox.io/s/async-haze-gctnf0?file=/src/userContext.js
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-18
  • 2018-04-12
  • 2020-01-09
  • 1970-01-01
  • 2019-04-25
  • 2020-09-14
相关资源
最近更新 更多