开发者问题收集

React Typescript:无法读取未定义的属性

2022-01-15
1044

控制台显示了一个新对象,但我仍然收到错误

const GetNo = (): string => {
        console.log(record);
        if (record.no !== "")
            return record.no;   //<-- Cannot read properties of undefined
        else
            return todos[todos.length - 1].no + 1;
    }

控制台:

在此处输入图像描述

编辑: 记录是对象类型(见上图),我通过 Button onClick 创建它,其中我修改了状态 this.setState({ selectedRecord: new ToDoClass() 。之后,我使用表单刷新了 FC

编辑 2: 我尝试了新的语法:

const GetNo = (): string => {
        if (record == null) {
            console.log("1");
            return "2";
        }
        else if (record.no != null) {
            console.log("2");
            return record.no;
        }
        else {
            console.log("3");
            return todos[todos.length - 1].no + 1;
        }
    }

当记录为: new ToDoClass() 时,它返回在控制台中 2 但它应该放在第一个语句内?!

2个回答

您的对象 record 在函数外部定义,可能未在函数执行时初始化。

我建议您:

  • 将对象作为函数的参数传递
  • 检查记录是否已定义

顺便说一句,如果您使用的是 Typescript,并且记录在传递给函数时可能未定义,您应该在调用 GetNo(record) 的行处收到警告。

const GetNo = (record: Record): string => {
   if (record) {
     // ...
   }
}

希望这会有所帮助!

Thomas
2022-01-15

我不知道为什么它会表现得像这样,但我用 Try-Catch 语句解决了它。

const GetNo = (): string => {
   try {
      if (record.no !== "")
         return record.no;
      else
         return todos[todos.length - 1].no + 1;
   }
   catch {
      return "0";
   }
}
Feisser
2022-01-16