【问题标题】:Unhandled Rejection (TypeError): Cannot read property 'children' of undefined未处理的拒绝(TypeError):无法读取未定义的属性“孩子”
【发布时间】:2019-03-06 09:16:24
【问题描述】:

我正在尝试使用 axios 从 rest api 获取数据 我想将数据存储在一个数组中并附加新的属性子项 但我收到错误 这是我的代码:

var categoriesTree = {};
axios.get('https://akkar.market/wp-json/wp/v2/job_listing_category?per_page=100')
.then(response => {
  categoriesTree = response.data
  categoriesTree.forEach(category => {
    if (category.parent === 0) {
      if (!(category.id in categoriesTree)) {
        categoriesTree[category.id] = {'name': category.name, 'children': []};
      } else {
        categoriesTree[category.id]['name'] = category.name;
      }
    } else {
      if (!category.parent in categoriesTree) {
        categoriesTree['parent'] = {'name': '', 'children': []};
      }
      categoriesTree['parent']['children'].push({'name': category.name, 'id': category.id});
    }
  })
})
console.log(categoriesTree)

我收到此错误:

【问题讨论】:

  • 尝试记录 categoriesTree['parent'] 看看它有什么
  • 我的猜测是 categoriesTree.parent 不值 0 但也不值 Array

标签: javascript reactjs axios


【解决方案1】:

我不确定你在if (!category.parent in categoriesTree) 下的意思,但看起来它总是会返回false。尝试将此条件简单地更改为if (!categoriesTree.parent),我想它会起作用。

【讨论】:

  • 我尝试过,但在这一行仍然给我错误 categoriesTree['parent']['children'].push({'name': category.name, 'id': category.id} );
  • 哦,对不起,我的回答有误,不是if (!category.parent),而是if (!categoriesTree.parent) :)
【解决方案2】:

看起来有几个问题:

  1. !category.parent in categoriesTree 中,您将采用category.parent 的逻辑非(将是truefalse)并在in 操作中使用该结果。您需要在 in 表达式周围使用 ()!(category.parent in categoriesTree)

  2. 即使是修订版,它也会在 categoriesTree 中检查名称为 category.parent 值的属性。但随后您创建了一个名为 parent 的属性,而不是名称来自 category.parent 的属性。

如果属性应该是category.parent 的值,请使用它而不是'parent'

if (!(category.parent in categoriesTree)) {
    categoriesTree[category.parent] = {'name': '', 'children': []};
}
categoriesTree[category.parent]['children'].push({'name': category.name, 'id': category.id});

如果它应该被称为parent(字面意思),那么请始终使用它:

if (!("parent" in categoriesTree)) {
    categoriesTree.parent = {'name': '', 'children': []};
}
categoriesTree.parent['children'].push({'name': category.name, 'id': category.id});

如果categoriesTree 没有名为x 的属性,或者该属性将对象引用作为值,则可以使用if (!categoriesTree.x)rather thanif (!("x" in categoriesTree)) `。将其应用于上述两个选项:

if (!categoriesTree[category.parent])) {
    categoriesTree[category.parent] = {'name': '', 'children': []};
}
categoriesTree[category.parent]['children'].push({'name': category.name, 'id': category.id});

如果它应该被称为parent(字面意思),那么请始终使用它:

if (!categoriesTree.parent)) {
    categoriesTree.parent = {'name': '', 'children': []};
}
categoriesTree.parent['children'].push({'name': category.name, 'id': category.id});

【讨论】:

    猜你喜欢
    • 2019-04-07
    • 2019-07-19
    • 2019-06-03
    • 2020-04-09
    • 2019-11-13
    • 2021-10-19
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    相关资源
    最近更新 更多