reactjs - 使用 npm 包中的 React 函数组件时出现无效的钩子调用错误
问题描述
我有一个 React 函数组件,SimpleComponent
从项目中导出library
并发布在 GitHub 包上。这个包在consumer
项目中使用,它只是呈现SimpleComponent
. 如果SimpleComponent
使用 React 钩子,则无法在consumer
项目中渲染,并且我收到以下与 React 钩子相关的错误:
Uncaught Error: Minified React error #321; visit https://reactjs.org/docs/error-decoder.html?invariant=321 for the full message or use the non-minified dev environment for full errors and additional helpful warnings.
library
项目:https
consumer
://github.com/joshigaurava/library项目:https ://github.com/joshigaurava/consumer
这两个项目都使用 React、TypeScript 和 webpack。包括 Package.json、TypeScript 和 webpack 配置。
library
包版本0.0.1
包含没有 React 钩子,它在项目SimpleComponent
中呈现和运行良好。consumer
(SimpleComponent
作品)
library
包版本0.0.2
包含SimpleComponent
React 钩子,它无法在consumer
项目中呈现。(SimpleComponent
失败)
我看到许多其他人面临类似的问题,到目前为止我已经尝试了各种方法,但没有任何效果:
consumer
确保项目 (npm ls react
,npm ls react-dom
)中对 react/react-dom 有单一依赖- 确保没有出现https://reactjs.org/warnings/invalid-hook-call-warning.html中列出的问题
- 在依赖项中使用时,人们似乎已经使用
npm link
或符号链接解决了这个问题npm file:
,但在我的情况下,consumer
项目正在通过使用library
npm 包来使用项目,因此这不适用 SimpleComponent
愚蠢地尝试以不同的方式导出- 有或没有default
等。
现在我想知道这是否与 webpack 如何捆绑library
项目有关。但我在这个问题上花费了太多时间,任何帮助将不胜感激。
解决方案
webpack 配置是问题所在。React 被捆绑在输出中。对于遇到此问题的任何人,遵循 webpack 配置有助于修复它:
externals = {
react: {
root: "React",
commonjs2: "react",
commonjs: "react",
amd: "react",
umd: "react",
},
"react-dom": {
root: "ReactDOM",
commonjs2: "react-dom",
commonjs: "react-dom",
amd: "react-dom",
umd: "react-dom",
},
};
推荐阅读
- angular - 将函数的返回类型设为打字稿中的任何枚举
- mysql - 具有相关子查询 mySql 的最小值
- javascript - 如何对 Google Ads 进行 api 调用
- android - Mapbox:空闲几分钟后得到 ANR
- excel - 关闭用户窗体时需要关闭 Excel
- maven - 在 Maven 中执行依赖项中定义的构建插件
- php - 如何修复 laravel 中 ixudra/curl 中的错误且响应不正确
- typescript - Loopback 4 控制器 省略
- c# - 事件 KeyDown/KeyPress/KeyUp 如何获取按下按钮的名称?
- amazon-web-services - AWS CodeBuild 服务的 CIDR 范围是多少?