有时,在使用 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
,则它可能会安装一个单独的 React 到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编写了两个module,我找到了一个解决方案......
假设您有 Parent 依赖于 React,而 Child 依赖于 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 module),到目前为止我所做的是使用插入符号指定 React 依赖项,例如 ^0.12.0。
此外,在进行构建时,所有连接的文件都会在 npm 生态系统之外使用,我使用 webpack
externals: { 'react': 'React'}
来查找全局 var React
。