使用React时的TypeError:无法读取未定义的属性"firstChild"

Dan*_*mov 28 javascript reactjs react-router

有时,当使用React库,例如react-router时,我收到此错误:

未捕获的TypeError:无法读取未定义的属性'firstChild'/~/
react-router/~/react/lib/ReactMount.js?:606

我如何解决它?

Dan*_*mov 65

此错误通常是由两个版本的React一起加载引起的.

例如,如果您npm install的软件包需要不同的React版本而dependencies不是将其放入peerDependencies,则可能会安装一个单独的React node_modules/<some library using React>/node_modules/react.

两种不同的React不能很好地一起玩(至少还没有).

要修复它,只需删除即可node_modules/<some library using React>/node_modules/react.
如果您看到放入React的库dependencies而不是peerDependencies,请提出问题.

  • 在单独的文件中使用`require('react')`&`require('react/addons')`时也可能发生这种情况. (9认同)
  • 类似于@Cethy所说的,使用`require('react')`和`require('React')`也会抛出这个错误. (8认同)
  • 我发现在使用Jest进行测试时也会发生这种情况.如果我需要全局响应,取决于测试它会抛出该错误.我发现的解决方法是每次在每个内部之前需要做出反应. (3认同)
  • @JedWatson你如何建议在新版本的React问世时解决问题?至少对等代表告诉作者是否认为图书馆已准备就绪.没有同行代表解决这个问题的正确方法是什么? (3认同)

Tom*_*Tom 11

如果任何人有这个问题npm link根据反应编辑了两个模块,我找到了一个解决方案......

假设您有父母取决于React,而Child取决于反应.当你这样做时:

cd ../child npm link cd ../parent npm link child

这会导致这个问题,因为父和子都会加载自己的React实例.

解决这个问题的方法如下:

cd parent cd node_modules/react npm link cd ../../../child npm link react

这可确保您的父项目提供反应依赖项,即使在链接时也是如此,这是npm在取消链接时解析依赖项的方式.