React 使用 LocalStorage 显示或隐藏元素
React using LocalStorage to show or hide elements
我正在尝试创建一个具有多种用户类型的网络应用程序,该用户类型因当前登录的用户而异。我遇到的问题如下:
当用户单击卡片时,将呈现一个包含卡片更多详细信息的对话框。在此对话框中,我希望有一个部分只呈现给特定用户,在这种情况下是管理员。我该怎么做?
我当前的代码包含以下内容:
// Gets the item from the storage correctly
if(localStorage.getItem("role") == "Administrator"){
alert('This currenly works');
//Show table that is not shown to other types of user, the getItem must result in Administrator in order to show the part of the component
}
//Shown to all users of the webapp
<div className="w-[70vw] max-w-[800px] relative">
<a
className="absolute -right-4 -top-4 rounded-full bg-white shadow-lg w-10 h-10 hover:bg-gray-200 hover:cursor-pointer transition flex justify-center items-center z-99"
onClick={resetDialog}
>
X
</a>
<h1 className="font-bold text-2xl border-b p-4">
{item_name}
</h1>
<div className="grid grid-cols-2 h-[240px] w-full relative">
<div className="h-[240px] p-4">
<div className="h-full w-full relative">
<img
src={image}
className="rounded-lg max-w-full max-h-full m-auto absolute top-0 left-0 right-0 bottom-0 shadow-lg"
/>
</div>
</div>
<div className="h-[240px] flex flex-col relative">
<div className="max-h-full overflow-auto p-4">
{item_description}
</div>
</div>
<div className="absolute bottom-[-16px] right-4 z-20">
<LoadingButton
onClick={onAddToCart}
isLoading={loadingAddToCart}
text="Add to cart"
className="w-48"
/>
</div>
</div>
//Should only be shown if the user is an Administrator
{/* <div>
<div
className={`${style.customTableRow} ${style.header} pr-4`}
>
<span>Name</span>
<span>Location</span>
<span>Availability</span>
</div>
<div className="max-h-[170px] overflow-auto">
{models.map((model) => (
<div
className={`${style.customTableRow} border-t`}
>
<span>{model.model}</span>
<span>{model.location_name}</span>
<span>
{getAvailabilityPill(model.availability)}
</span>
<div className="flex justify-center">
<button
className="flex bg-green-500 rounded-full hover:bg-green-300 transition text-white p-1"
onClick={() => addRequest(model.id)}
>
<i className="fa-solid fa-plus"></i>
</button>
</div>
</div>
))}
</div>
</div> */} //End of content for Administrator
</div>
如有任何建议,我们将不胜感激。
您可以有条件地呈现内容,
{isUserAdmin && <SpecialAdminContent />}
仅为管理员用户显示内容。
您可以通过制作一个简单的标志来表示用户是否是管理员,如果用户将是管理员,它将呈现 admin-specific 内容,否则它将呈现网站上的正常内容。看看这段代码
const [ isAdmin , SetIsAdmin ] = useState(false)
useEffect ( ()=> { SetIsAdmin(localStorage.getItem("role") == "Administrator") } , [])
return (
{isAdmin ? <> Admin </> : <> User </>}
)
// ! don't forget to import hooks
我正在尝试创建一个具有多种用户类型的网络应用程序,该用户类型因当前登录的用户而异。我遇到的问题如下:
当用户单击卡片时,将呈现一个包含卡片更多详细信息的对话框。在此对话框中,我希望有一个部分只呈现给特定用户,在这种情况下是管理员。我该怎么做?
我当前的代码包含以下内容:
// Gets the item from the storage correctly
if(localStorage.getItem("role") == "Administrator"){
alert('This currenly works');
//Show table that is not shown to other types of user, the getItem must result in Administrator in order to show the part of the component
}
//Shown to all users of the webapp
<div className="w-[70vw] max-w-[800px] relative">
<a
className="absolute -right-4 -top-4 rounded-full bg-white shadow-lg w-10 h-10 hover:bg-gray-200 hover:cursor-pointer transition flex justify-center items-center z-99"
onClick={resetDialog}
>
X
</a>
<h1 className="font-bold text-2xl border-b p-4">
{item_name}
</h1>
<div className="grid grid-cols-2 h-[240px] w-full relative">
<div className="h-[240px] p-4">
<div className="h-full w-full relative">
<img
src={image}
className="rounded-lg max-w-full max-h-full m-auto absolute top-0 left-0 right-0 bottom-0 shadow-lg"
/>
</div>
</div>
<div className="h-[240px] flex flex-col relative">
<div className="max-h-full overflow-auto p-4">
{item_description}
</div>
</div>
<div className="absolute bottom-[-16px] right-4 z-20">
<LoadingButton
onClick={onAddToCart}
isLoading={loadingAddToCart}
text="Add to cart"
className="w-48"
/>
</div>
</div>
//Should only be shown if the user is an Administrator
{/* <div>
<div
className={`${style.customTableRow} ${style.header} pr-4`}
>
<span>Name</span>
<span>Location</span>
<span>Availability</span>
</div>
<div className="max-h-[170px] overflow-auto">
{models.map((model) => (
<div
className={`${style.customTableRow} border-t`}
>
<span>{model.model}</span>
<span>{model.location_name}</span>
<span>
{getAvailabilityPill(model.availability)}
</span>
<div className="flex justify-center">
<button
className="flex bg-green-500 rounded-full hover:bg-green-300 transition text-white p-1"
onClick={() => addRequest(model.id)}
>
<i className="fa-solid fa-plus"></i>
</button>
</div>
</div>
))}
</div>
</div> */} //End of content for Administrator
</div>
如有任何建议,我们将不胜感激。
您可以有条件地呈现内容,
{isUserAdmin && <SpecialAdminContent />}
仅为管理员用户显示内容。
您可以通过制作一个简单的标志来表示用户是否是管理员,如果用户将是管理员,它将呈现 admin-specific 内容,否则它将呈现网站上的正常内容。看看这段代码
const [ isAdmin , SetIsAdmin ] = useState(false)
useEffect ( ()=> { SetIsAdmin(localStorage.getItem("role") == "Administrator") } , [])
return (
{isAdmin ? <> Admin </> : <> User </>}
)
// ! don't forget to import hooks