问题描述
我试图以一种愚蠢的方式在JSX中执行if条件
{
((selectedWebsite != null) && (selectedWebsite.desktop_prompt != null) &&
(typeof selectedWebsite.desktop_prompt !== "undefined")) ?
<FormControlLabel style={{"margin-left": "auto"}}
control={<Switch size="small"
checked={selectedWebsite.desktop_prompt.enabled}
onChange={handleCheckDesktop}/>}
/> :
null
}
现在selectedWebsite
是{}且未定义desktop_prompt,但仍在执行if条件,并且出现错误 TypeError:无法读取未定义的属性“ enabled” 。我在这里做什么错了?
解决方法
由于selectedWebsite是一个empty object,因此您可以检查密钥长度,而不必检查空对象是undefined
还是null
:
{Object.keys(selectedWebsite).length !== 0 ?
<FormControlLabel
style={{"margin-left": "auto"}}
control={<Switch size="small"
checked={selectedWebsite.desktop_prompt && selectedWebsite.desktop_prompt.enabled}
onChange={handleCheckDesktop}
/>}
/> : null}
,
尝试一下。
{
selectedWebsite && selectedWebsite.desktop_prompt ?
<FormControlLabel style={{"margin-left": "auto"}}
control={<Switch size="small"
checked={selectedWebsite.desktop_prompt.enabled}
onChange={handleCheckDesktop}/>}
/> :
null
}