首页 > 解决方案 > “TypeError:无法读取未定义的属性‘长度’”仅在生产版本中

问题描述

我已经构建了一个应用程序,create-react-app虽然在开发中一切正常,但一旦我npm run build使用生产构建文件运行并启动应用程序,我得到:

react-dom.production.min.js:156 Uncaught TypeError: Cannot read property 'length' of undefined
    at ri (react-dom.production.min.js:156)
    at gi (react-dom.production.min.js:167)
    at Object.Oi [as useEffect] (react-dom.production.min.js:167)
    at Object.t.useEffect (react.production.min.js:22)
    at w (makeStyles.js:191)
    at S (makeStyles.js:228)
    at withStyles.js:55
    at ai (react-dom.production.min.js:157)
    at Ni (react-dom.production.min.js:176)
    at Vu (react-dom.production.min.js:271)

我已经浏览了代码,并且在尝试访问的所有地方都添加了可选链接,length但错误仍然存​​在。我不确定为什么这个错误只会在构建中而不是在开发中显示。我无法发布特定代码,因为我不确定这个错误出现在哪里或为什么出现,所以欢迎任何指针。

编辑:如果我转到缩小的 .js 文件,这就是它说错误发生的地方。

function Bh(a, b) {
    if (null === b)
        return !1;
    for (var c = 0; c < b.length && c < a.length; c++)
        if (!He(a[c], b[c]))
            return !1;
    return !0
}

编辑2:我已经评论了我访问的每一行代码,length我已经删除了build文件夹并npm run build再次运行,但错误仍然存​​在。

回答: 我已经以某种方式解决了这个错误,但我不确定如何解决。我认为原因在于功能组件makeStyleswithStyles因为没有必要在withStyles那里使用。

标签: reactjs

解决方案


当我们试图访问一个key数组类型的值并检查它的长度时,就会发生这种情况。前任:

const someData = [
  {
    tags: []
  },{
    id: '1',
    tags: []
  }
]

someData.map((x) => {
  const length = x.tags.length; // this works fine
})

然而

const someData = [
  {
    tags: []
  },{
    id: '1',
  }
]

someData.map((x) => {
  const length = x.tags.length; // [ERR]: Cannot read property 'length' of undefined 

})

它在生产构建中不起作用的原因可能是因为那个特别data缺少一些key值。尝试检查该帐户的数据库记录


推荐阅读