reactjs - 如何重用带有钩子的 React 库
问题描述
我正在编写自己的库来帮助使用 React 构建表单。
目标是能够在任何 React 应用程序中重用它(从头开始,使用create-react-app,nextjs,其他?)
我的问题是我无法弄清楚如何重新使用它。
这是我尝试在另一个项目中重用我的库时遇到的第一个问题:
无效的挂机呼叫警告
React 说原因可能是以下之一:
- 你可能有不匹配的 React 和 React DOM 版本。
- 您可能违反了 Hooks 规则。
- 您可能在同一个应用程序中拥有多个 React 副本。
经过调查,我已经排除了点1.
和2.
我首先使用Parcel来构建我的库,但我需要从包中排除 React 来解决3.
这就是我切换到Webpack并将React依赖项移至peerDependencies
+的原因devDependencies
。
我尝试了不同的 webpack 配置:
const config: webpack.Configuration = {
...
externals: {
react: 'React'
}
}
--> 这会在消费应用程序中导致以下错误:
反应未定义
const config: webpack.Configuration = {
...
externals: {
react: {
root: 'React',
amd: 'react',
commonjs: 'react',
commonjs2: 'react',
umd: 'react',
}
}
}
--> 这会导致以下错误:
无法读取未定义的属性“createContext”
我尝试将我的库与 npm 链接一起使用,并在 npm 上发布它,但结果是一样的。
重现步骤:
- 安装
@mlaopane/formhook
在您的反应应用程序(npm i @mlaopane/formhook
或yarn add @mlaopane/formhook
)中 - 尝试使用一个组件,例如
import { Form } from '@mlaopane/formhook'
export default function App() {
return <Form />
}
- 您应该在控制台中看到错误
谢谢你帮我解决这个问题:)
注意:这是我的第一个问题,如果需要更多信息,请告知。
解决方案
推荐阅读
- angular - 为什么页面上显示的值太多?
- php - 在 Laravel 中使用有很多直通关系
- sails.js - 来自数据库适配器的意外错误:`select` 失败(“badConnection”)
- python - 在 Dataframe 上并行化 PySpark 阐述的最佳方法?
- join - 如何在 SAS 的数据集中找到匹配项后创建新变量
- c# - 批量合并(添加和更新)行
- sql - 好与坏以及为什么在 SQL 查询连接中应用复杂查询?
- java - 如何使用 Java 使用 bodyPart.isMimeType("message/rfc822") 读取 .mgs 附件
- laravel - Laravel 按特定列获取下一条/上一条记录
- google-chrome-devtools - Google Chrome DevTools 中的元素选项卡行为不端