[英]In React, if a state is an empty array then how do you render a text conditionally?
I want to render 'menu is empty'.我想渲染“菜单为空”。 Otherwise I am able to map through and render the json data from the api correctly.否则,我可以通过 map 并正确渲染来自 api 的 json 数据。
const Navbar = () => {
const [menu, setMenu] = useState([]);
if (menu === []) {
setMenu(["menu is empty"])
}
return (
<div className='nav-area'>
<Link to='/' className='logo'>LOGO</Link>
<ul className='menus'>
{menu.map((main) => (
<MenuItems items={main} key={main.type}/>
))}
</ul>
</div>
);
};
export default Navbar;
you can simply check your array length and base on that render text or ul with items您可以简单地检查您的数组长度并基于该渲染文本或带有项目的 ul
sth like this:像这样的某事:
const Navbar = () => {
const [menu, setMenu] = useState([]);
return (
<div className='nav-area'>
<Link to='/' className='logo'>LOGO</Link>
{
menu.length > 0 ? (
<ul className='menus'>
{
menu.map((main) => (
<MenuItems items={main} key={main.type}/>
))
}
</ul>
) : <>menu is empty</>
}
</div>
);
};
export default Navbar;
You can use inline If-Else to render conditionally.您可以使用内联 If-Else 有条件地呈现。
Inline If-Else with Conditional Operator 带有条件运算符的内联 If-Else
Example:例子:
const Navbar = () => {
const [menu, setMenu] = useState([]);
if (menu === []) {
setMenu(["menu is empty"])
}
return (
<div className='nav-area'>
<Link to='/' className='logo'>LOGO</Link>
<ul className='menus'>
{ menu.lenght < 1
? menu.map((main) => (
<MenuItems items={main} key={main.type}/>
))
: 'menu is empty'
}
</ul>
</div>
);
};
export default Navbar;
In this scenario there is two possibilities either menu is empty or have some data.在这种情况下,有两种可能性菜单为空或有一些数据。
What i do in this situation is check for condition whether array is empty by .length
property and also check for if not empty then is it an array or not by Array.isArray
method.在这种情况下,我所做的是通过.length
属性检查数组是否为空,并通过Array.isArray
方法检查是否为空,然后检查它是否为数组。
If both condition satisfy then render the content otherwise render the "Menu is empty".如果两个条件都满足,则呈现内容,否则呈现“菜单为空”。 Something like this像这样的东西
const Navbar = () => {
const [menu, setMenu] = useState([]);
return (
<div className="nav-area">
<Link to="/" className="logo">
LOGO
</Link>
{Array.isArray(menu) && menu.length ? (
<ul className="menus">
{menu.map((main) => (
<MenuItem items={main} key={main.type} />
))}
</ul>
) : (
// or you may have a component for this
<h3>Menu is Empty</h3>
)}
</div>
);
};
export default Navbar;
right way using react使用反应的正确方法
import { useMemo } from "react";
const Navbar = () => {
const [menu, setMenu] = useState([]);
const displayMenus = useMemo(
() =>
{
if(menu.length === 0) return <div>EMPTY</div>
return menu.map(
(main) =>
{
return <MenuItems items={main} key={main.type}/>
}
)
},
[menu]
)
return (
<div className='nav-area'>
<Link to='/' className='logo'>LOGO</Link>
<ul className='menus'>
{displayMenus}
</ul>
</div>
);
};
export default Navbar;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.