我可以从redux访问状态const { isauthenticated, user } = useSelector((state) => state.user);
但是正如你在下面的代码中看到的
<div className="container-fluid upnavcon">
<span className="navbar-brand fs-1 gwen">Gadget Zone</span>
{isauthenticated ? (
<div className="buttonbox">
<Link className="upnavbtns" to="/LogSign">
Login / Signup
</Link>
</div>
) : (
<>
<SpeedDial
ariaLabel="SpeedDial tooltip example"
onClose={() => setOpen(false)}
onOpen={() => setOpen(true)}
open={open}
direction="down"
icon={
<img
className="speedDialIcon"
src={`${user.avatar.url?user.avatar.url:"/logo192.png"}`}
alt="pic"
/>
}
>
<SpeedDialAction icon={<DashboardIcon/>} tooltipTitle="DAshboard"/>
<SpeedDialAction icon={<DashboardIcon/>} tooltipTitle="DAshboard"/>
</SpeedDial>
</>
)}
</div>
如果用户通过了身份验证,那么我将显示其他内容问题是Cannot read properties of undefined (reading 'url')
,在错误的最后写着
Consider adding an error boundary to your tree to customize error handling behavior.
我的加载状态是loading:false, isauthenticated:true2秒后加载:false, isauthenticated:true,user{…}
就像Hunter McMillen在评论中补充的那样,看起来user.avatar
是未定义的。
所以当你创建三元表达式时:
user.avatar.url ? user.avatar.url : "/logo192.png"
user.avatar.url
失败,因为user.avatar
没有定义。
你可以用可选的链接修复这个问题,如下所示:
user.avatar?.url ? user.avatar.url : "/logo192.png"
编辑:正如Ahmad Faraz在评论中所说,你可以进一步简化为user.avatar?.url || "/logo192.png"
,不需要使用三元表达式。
看起来user.avatar
可以未定义。要修复这个错误,只需在该行添加一个检查符:
src={`${user.avatar?.url ? user.avatar.url : "/logo192.png"}`}
如何存储您的状态?当你调用它时,你可以尝试使用三元制,这不是解决问题的正确方法,但你可以试试这个。
const {isauthenticated, user} = useSelector((state) =>州? .user);