我正在尝试根据用户的logged
条件有条件地显示徽章。如果来自服务器的道具是true
,则徽章是绿色的else
灰色。
我尝试了各种解决方案,从JSX中的基本if / else到classNames,但是徽章没有被渲染。
我的代码:
{user.loggedIn ? (
<div
className={classNames('badge badge-pill', {
'badge-success': user.loggedIn,
'badge-danger': !user.loggedIn
})}
/>
我没有发现代码有什么问题。我的意思是该项目应该已经渲染,具有多种解决方案。任何想法,我在做什么错。
<span
className={
user.loggedIn ? 'badge badge-pill badge-success' : 'badge badge-pill badge-muted'
}
/>
我也尝试过。
我可以看到React-Dev-Tools中的元素正确渲染,没有正确的道具,但是我无法在屏幕上看到它。
答案 0 :(得分:1)
仅当用户登录后,您的内容才会呈现。另外,div标签必须在条件{isLoggedIn}
内关闭您应该尝试这样的事情:
{user.loggedIn ? (
<div className={'badge badge-pill badge-success'}>ENTER YOUR CONTENT HERE</div>) : (
<div className={'badge badge-pill badge-danger'}>ENTER YOUR CONTENT HERE</div>
)}
但是由于div是自动关闭的并且没有内容,因此不会显示它,因此也要添加一些内容
答案 1 :(得分:0)
如果user.loggedIn
是布尔值,那么您可以直接写
<div
className={
classNames('badge badge-pill', {
'badge-success': user.loggedIn,
'badge-danger': user.loggedIn
})
}
/>
答案 2 :(得分:0)
我认为最好避免直接在jsx中使用条件。您可以执行以下操作:
let attachClass = ['badge', 'badge-pill']
if(user.loggedIn){
attachClass = [...attachClass, 'badge-success'].join(' ');
}else{
attachClass = [...attachClass, 'badge-danger'].join(' ');
}
比起您可以使用className附加类返回一个div:
<div className={attachClass}></div>
答案 3 :(得分:0)
问题进入user.loggedIn,但未定义或返回
const loggedIn = true;
<span className={loggedIn ? 'badge-success' : 'badge-muted'}>
Css Change </span>