我有一个错误,如果未经授权的用户提出某个请求,我希望显示该错误.我希望管理员是唯一一个能够查看这个屏幕(屏幕删除用户从数据库).这一部分工作正常,但它显示的文本作为每一列的标题(ID、用户名、邮箱),当我只希望未经授权的消息出现(针对未经授权的用户)时,这些文本都聚集在一起.我如何解决这个问题?

董事会管理员.jsx:

import React, {useState, useEffect} from 'react';
import UserService from '../../services/user.service';
import './styles/BoardAdmin.css';
const BoardAdmin = () => {
    const [content, setContent] = useState('');
    const [users, setUsers] = useState([]);
    useEffect(() => {
        UserService.getAdminBoard().then(
            (response) => {
                setUsers(response.data);
                // console.log(response.data);
            },
            (error) => {
                const _content =
                    (error.response &&
                        error.response.data &&
                        error.response.data.message) ||
                    error.message ||
                    error.toString();
                setContent(_content);
            }
        );
    }, []);
    return (
        <div className='page'>
            <header className='jumbotron'>
                <div className='column-names'>
                    <p>{content}</p>
                    <p className='user-id-column'>User ID</p>
                    <p className='username-column'>Username</p>
                    {/* <p>User Role</p> */}
                    <p className='user-email-column'>Email</p>
                </div>
                {users.map((user) => (
                    <ul className='user-list'>
                        <li class='user'>
                            <div>
                                <div class='info'>
                                    <span class='user-id'>{user.id}</span>
                                    <span class='name'>{user.username}</span>
                                    <span class='role'>{user.role}</span>
                                    <span class='email'>{user.email}</span>
                                    <img class='remove' src='https://i.imgur.com/CemzWSg.png' />
                                </div>
                            </div>
                            <div class='expand'></div>
                        </li>
                    </ul>
                ))}
            </header>
        </div>
    );
};
export default BoardAdmin;

enter image description here

推荐答案

您可以通过在列的名称前添加一个呈现条件content(您的错误消息)来修复它.

如果没有错误消息(content为空),则将呈现列.否则,只需将content渲染为错误消息显示

{!content && <>
   <p className='user-id-column'>User ID</p>
   <p className='username-column'>Username</p>
   {/* <p>User Role</p> */}
   <p className='user-email-column'>Email</p>
</>}

除此之外,我建议您应该有一个加载状态,以了解您的请求何时完成,以便进行适当的渲染

const [isLoading, setIsLoading] = useState(true) //initially, it's loading

然后设置加载状态

useEffect(() => {
        UserService.getAdminBoard().then(
            (response) => {
                setUsers(response.data);
                setIsLoading(false); //the request is completed
                // console.log(response.data);
            },
            (error) => {
                const _content =
                    (error.response &&
                        error.response.data &&
                        error.response.data.message) ||
                    error.message ||
                    error.toString();
                setContent(_content);
                setIsLoading(false); //the request is completed
            }
        );
}, []);

在请求的等待期间,可以呈现加载组件

//TODO: You can modify this loading rendering according to your UI
if(isLoading) {
  return <div className='page'>Loading...</div>
}

完全可能的改变

import React, {useState, useEffect} from 'react';
import UserService from '../../services/user.service';
import './styles/BoardAdmin.css';
const BoardAdmin = () => {
    const [content, setContent] = useState('');
    const [users, setUsers] = useState([]);
    const [isLoading, setIsLoading] = useState(true); //initially, it's loading
    useEffect(() => {
        UserService.getAdminBoard().then(
            (response) => {
                setUsers(response.data);
                setIsLoading(false); //the request is completed
                // console.log(response.data);
            },
            (error) => {
                const _content =
                    (error.response &&
                        error.response.data &&
                        error.response.data.message) ||
                    error.message ||
                    error.toString();
                setContent(_content);
                setIsLoading(false); //the request is completed
            }
        );
    }, []);

    //TODO: You can modify this loading rendering according to your UI
    if(isLoading) {
       return <div className='page'>Loading...</div>
    }

    return (
        <div className='page'>
            <header className='jumbotron'>
                <div className='column-names'>
                    <p>{content}</p>
                    {!content && <>
                       <p className='user-id-column'>User ID</p>
                       <p className='username-column'>Username</p>
                       {/* <p>User Role</p> */}
                       <p className='user-email-column'>Email</p>
                    </>}
                </div>
                {users.map((user) => (
                    <ul className='user-list'>
                        <li class='user'>
                            <div>
                                <div class='info'>
                                    <span class='user-id'>{user.id}</span>
                                    <span class='name'>{user.username}</span>
                                    <span class='role'>{user.role}</span>
                                    <span class='email'>{user.email}</span>
                                    <img class='remove' src='https://i.imgur.com/CemzWSg.png' />
                                </div>
                            </div>
                            <div class='expand'></div>
                        </li>
                    </ul>
                ))}
            </header>
        </div>
    );
};
export default BoardAdmin;

Javascript相关问答推荐

React中的表格中 Select Radio按钮

为什么(1 + Number.Min_UTE)等于1?

想要检测字符串中的所有单词

Vue Quill css仅应用于我的第一个Quill Editor组件+如何自定义工具栏

如何使用React渲染器放置根dis?

如何在不分配整个数组的情况下修改包含数组的行为主体?

是否有方法在OpenWeatherMap API中获取过go 的降水数据?

Klaro与Angular的集成

类型自定义lazy Promise. all

微软Edge编辑和重新发送未显示""

Angular 中的类型错误上不存在获取属性

使用Java脚本导入gltf场景并创建边界框

在运行时使用Next JS App Router在服务器组件中运行自定义函数

try 使用javascript隐藏下拉 Select

Reaction Redux&Quot;在派单错误中检测到状态Mutations

自定义图表工具提示以仅显示Y值

未捕获语法错误:Hello World中的令牌无效或意外

如何找到带有特定文本和测试ID的div?

在JS/TS中将复杂图形转换为数组或其他数据 struct

更改agGRID/Reaction中的单元格格式