有时,在使用 React 库(例如react-router)时,我会收到以下错误:
未捕获的类型错误:无法读取未定义的属性“firstChild”
/~/react-router/~/react/lib/ReactMount.js?:606
我如何解决它?
有时,在使用 React 库(例如react-router)时,我会收到以下错误:
未捕获的类型错误:无法读取未定义的属性“firstChild”
/~/react-router/~/react/lib/ReactMount.js?:606
我如何解决它?
这个错误通常是由同时加载的两个版本的 React引起的。
例如,如果你npm install
的包需要不同的 React 版本并将其放入而dependencies
不是.peerDependencies
node_modules/<some library using React>/node_modules/react
两种不同的 React 不能很好地结合在一起(至少目前如此)。
要修复它,只需删除node_modules/<some library using React>/node_modules/react
.
如果您看到一个库将 React 放入dependencies
而不是peerDependencies
,请提出问题。
npm link
如果有人根据反应编辑两个模块有这个问题,我找到了一个解决方案......
假设您有依赖于 React 的父级和依赖于反应的子级。当你这样做时:
cd ../child
npm link
cd ../parent
npm link child
这会导致这个问题,因为父母和孩子将各自加载他们自己的 React 实例。
解决此问题的方法如下:
cd parent
cd node_modules/react
npm link
cd ../../../child
npm link react
这可以确保您的父项目提供 react 依赖项,即使在链接时也是如此,这就是 npm 在您取消链接时解决依赖项的方式。
使用require('react')
和require('React')
不一致也会导致这个问题,即使你只有一个版本的 React。
https://www.npmjs.com/package/gulp-browserify没有这个问题。一旦我停止使用 gulp-browserify 并切换到 watchify+browserify,Uncaught TypeError: Cannot read property 'firstChild' of undefined
就开始发生了。
在我看来,peerDependencies 并没有受到关注。见https://github.com/npm/npm/issues/5080#issuecomment-40545599
我正在维护react-date-picker(和其他 react 模块),到目前为止我所做的是使用插入符号指定 React 依赖项,例如 ^0.12.0。
此外,在构建所有连接文件时,为了在 npm 生态系统之外使用,我使用 webpack
externals: { 'react': 'React'}
来查找全局 var React
。
如果您在服务器端渲染时遇到此崩溃并且这些答案都不是问题,这可能是罪魁祸首:
在 componentWillMount 中执行异步操作(setTimeout、AJAX 等)。由于在服务器上调用了 componentWillMount,所以这个 setTimeout/request 仍然会触发。如果您在此回调中设置状态,则会导致上述错误。
对我来说,问题是我在from react-bootstrap中使用了<Link>
from react-router 。<NavItem>