开发者问题收集

React JS TypeError:无法读取 areHookInputsEqual 中未定义的属性“length”

2020-10-20
6529

我在使用 “react-dom/server”中的 renderToString 在 SSR 上渲染某些 URL 时遇到一些错误

我收到以下错误:

TypeError: Cannot read property 'length' of undefined
at areHookInputsEqual (C:\projects\spd-web-app1\node_modules\react-dom\cjs\react-dom-server.node.development.js:992:38)
at Object.useMemo (C:\projects\spd-web-app1\node_modules\react-dom\cjs\react-dom-server.node.development.js:1230:13)
at useMemo (C:\projects\spd-web-app1\node_modules\react\cjs\react.development.js:1521:21)
at Provider (C:\projects\spd-web-app1\node_modules\react-redux\lib\components\Provider.js:22:41)
at finishHooks (C:\projects\spd-web-app1\node_modules\react-dom\cjs\react-dom-server.node.development.js:1077:16)
at processChild (C:\projects\spd-web-app1\node_modules\react-dom\cjs\react-dom-server.node.development.js:3046:14)
at resolve (C:\projects\spd-web-app1\node_modules\react-dom\cjs\react-dom-server.node.development.js:2962:5)
at ReactDOMServerRenderer.render (C:\projects\spd-web-app1\node_modules\react-dom\cjs\react-dom-server.node.development.js:3437:22)
at ReactDOMServerRenderer.read (C:\projects\spd-web-app1\node_modules\react-dom\cjs\react-dom-server.node.development.js:3375:29)
at renderToString (C:\projects\spd-web-app1\node_modules\react-dom\cjs\react-dom-server.node.development.js:3990:27)

我发现,在 react-dom-server.node.development.js createWorkInProgressHook()

我得到以下对象,其中 memoizedState 不是数组。

{
  memoizedState: 0,
  queue: { last: null, dispatch: [Function: bound dispatchAction] },
  next: {
    memoizedState: { current: [QueryData] },
    queue: null,
    next: { memoizedState: [Object], queue: null, next: [Object] }
  }
}

当在 useMemo() 中使用时 var prevDeps = prevState[1]; 将返回未定义,从而导致 areHookInputsEqual()

中出现问题>

我不确定可能出了什么问题,所以没有代码可以分享。

2个回答

我曾经见过这种情况,当钩子在条件语句之后使用时。 将钩子用法移到条件语句上方解决了这个问题。

参考: https://reactjs.org/docs/hooks-rules.html

fpintos
2022-07-06

我知道这个问题真的很老了,但希望发布此问题可以帮助将来的其他人。 在我的情况下,当我使用 Array.map() 而没有在循环中的顶级子元素上指定唯一的 key 属性时,我遇到了此错误。

我花了几天时间才弄清楚我的错误,无论出于何种原因,都没有明确的错误消息表明根本原因。 文档中清楚地表明,应该在列表的所有子项上使用唯一键,但我认为这不是允许出现这种神秘错误消息的很好的理由。

https://react.dev/learn/rendering-lists#keeping-list-items-in-order-with-key

Dom
2023-11-10