【问题标题】:Map Function - Unhandled JS Exception: TypeError: undefined is not an object evaluating map映射函数 - 未处理的 JS 异常:TypeError:未定义不是评估映射的对象
【发布时间】:2021-10-25 13:25:39
【问题描述】:

我有一个名为 displayKeyHelpers.ts 的文件,members.map 代码位于第 118 行。该代码适用于大多数用户和 QA,但有时成员似乎未定义。我正在查看一份崩溃报告,上面写着

displayKeyHelpers.ts, line 118
SIGABRT: Unhandled JS Exception: TypeError: undefined is not an object (evaluating 'n.map') This error is located at: in V in Unknown in Unknown in Unknown..

似乎下面函数中的成员未定义。如何添加支票?

export const memberDropdownOptions = (members: any): Option[] => {
  const options: Option[] = []
  members.map((member: Person) => {
    options.push({
      label: `${member.firstName} ${member.lastName}`,
      value: member.dependentNumber,
    })
  })
  return options
}

这是我尝试过的,但它未能通过一些单元测试,所以我猜测它是不正确的:

export const memberDropdownOptions = (members: Person[]): Option[] => {
  const options: Option[] = []
  members?.map((member: Person) => {
    options.push({
      label: `${member?.firstName} ${member?.lastName}`,
      value: member?.dependentNumber,
    })
  })
  return options
}

函数是这样使用的:

const memberOptions = memberDropdownOptions(members)

【问题讨论】:

  • 如果您不想更改单元测试,则需要检查此函数的输入值。这个函数怎么调用?
  • @wowandy 刚刚更新了问题
  • 这很明显)但是您可能传递了一个 undefined 值。所以应该在调用这个函数的组件的代码中查找错误。您还可以尝试更改函数签名,如第二个选项 - const memberDropdownOptions = (members: Person[]): Option[]。在这种情况下,错误会更清楚

标签: javascript reactjs typescript react-native


【解决方案1】:

在调用函数时未定义您传递给memberDropdownOptions(members)members 参数。

members 是否依赖一些异步逻辑来被赋予一个值?回溯到它被赋值的地方,并确保memberDropdownOptions() 只在它有一个值时触发。

【讨论】:

  • 所以你建议我不要更改任何功能代码,而是将用法更改为let memberOptions: Option[] = [] // Check if members is undefined if (members) memberOptions = memberDropdownOptions(members)
  • 很难说没有看到其余的代码,但就个人而言,在制作函数时,我绝不会允许参数未定义的机会。查看您的参数(members: Person[])。类型是Person[],而不是Person[] | undefined。在此函数之外更改您的代码,以确保您的参数永远不会未定义。 TypeScript 是否不会抛出错误,指出 members 可能未定义?如果没有,您可能错误地构建了您的类型/接口。继续往上走,控制台日志记录,这样你就可以找出它没有被分配的地方。
猜你喜欢
  • 2018-07-08
  • 2012-09-12
  • 2020-09-14
  • 2021-12-17
  • 2021-12-01
  • 2019-11-16
  • 2020-02-09
  • 2019-12-07
  • 2022-01-01
相关资源
最近更新 更多