使用 React 时出现类型错误:无法读取未定义的属性“firstChild”

IT技术 javascript reactjs react-router
2021-05-18 04:17:22

有时,在使用 React 库(例如react-router )时,我会收到此错误:

未捕获的类型错误:无法读取未定义的属性“firstChild”
/~/react-router/~/react/lib/ReactMount.js?:606

我如何解决它?

4个回答

这个错误通常是由两个版本的 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