如何修复错误,未捕获的类型错误:无法读取 null 的属性(读取‘id’)
2022-03-21
2455
我收到以下错误:未捕获 TypeError:无法读取 null 的属性(读取“id”)。 但当我更改我的 initialState(对象)时,它工作正常
type AnchorElAction = {
id: string;
domTarget: React.ReactNode;
} | null;
const [anchorEl, setAnchorEl] = useState<AnchorElAction | null>(null);
return (
{events?.map((event, index) => {
return (
<Styled.Event key={`${event.id}:${event.name}`} onClick={handleOpenPopover(event.id)}>
{renderShifts(event)}
{anchorEl.id === event.id && (
<ShiftPopover
start={event.start}
end={event.end}
name={event.name}
id={event.id}
onClose={handleCloseModal}
anchorEl={anchorEl.domTarget}
open={Boolean(anchorEl.domTarget)}
/>
)}
</Styled.Event>
);
})}
)
2个回答
因为当你这样做时
const [anchorEl, setAnchorEl] = useState<AnchorElAction | null>(null);
anchorEl === null 所以你不能做anchorEl.id
当你这样做时
const [anchorEl, setAnchorEl] = useState<AnchorElAction>({});
你可以在anchorEl中访问属性id 所以anchorEl === {} and anchorEl.id === null
要解决这个问题,请删除null或检查何时使用anchorEl.id,例如
anchorEl?.id
// if anchorEl === null => anchorEl?.id === null
//if anchorEl === {} => anchorEl?.id === nulll
//if anchorEl === {id : 'any id'} => anchorEl?.id === 'any id'
vy.pham
2022-03-21
您可以使用
.?
运算符。
对于您的情况,
event.id
应更改为
event?.id
。为了避免类似的问题,每次访问
event
的属性或任何其他可能为
null
或
undefined
的变量时,我都会添加
.?
运算符。
有关它的更多信息,请参阅 官方文档 。
Roberto Rossini
2022-03-21