开发者问题收集

如何修复错误,未捕获的类型错误:无法读取 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 的属性或任何其他可能为 nullundefined 的变量时,我都会添加 .? 运算符。

有关它的更多信息,请参阅 官方文档

Roberto Rossini
2022-03-21