npm/yarn link 测试包时报错 Warning: Invalid hook call. Hooks can only be called ...

这篇具有很好参考价值的文章主要介绍了npm/yarn link 测试包时报错 Warning: Invalid hook call. Hooks can only be called ...。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  • 使用 dumi 开发 React 组件库时,为避免每次修改都发布到 npm,需要在本地的测试项目中使用 npm link 为组件库建立软连接,方便本地调试。

  • 结果在本地测试项目使用 $ npm link 组件库 后,使用内部组件确报错:

    react.development.js:209 Warning: Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:
    1. You might have mismatching versions of React and the renderer (such as React DOM)
    2. You might be breaking the Rules of Hooks
    3. You might have more than one copy of React in the same app
    See https://reactjs.org/link/invalid-hook-call for tips about how to debug and fix this problem.
    
  • 报错信息中提供了三种可能的原因,针对这三个可能原因逐一检查:

    1. React HooksReact 16.8.0 版本中引入的,先检查 reactreact-dom 的版本。发现是高于 16.8.0 的,支持 React Hook。排除

    2. 检查是否违背了调用 hook 的规则。然而组件中并未使用 hook,但是依赖的第三方库使用了 hook,并且使用方式是正确的;排除

    3. 检查项目中是否存在多个不同版本的 react 。发现测试项目和组件库中都存在 react 依赖,但是组件库中的 package.json 中已经将 reactreact-dom 都添加到了 peerDependencies 属性中。待定

  • 极有可能是因为第三条导致了问题,继续查阅文档,官网 在此处 给出过可能的原因。

    This problem can also come up when you use npm link or an equivalent. In that case, your bundler might “see” two Reacts — one in application folder and one in your library folder. Assuming myapp and mylib are sibling folders, one possible fix is to run npm link …/myapp/node_modules/react from mylib. This should make the library use the application’s React copy.

    已经基本确定是由于 npm link 引发了问题,猜测使用 npm link 时,不会忽略 package.json 中的 peerDependencies 选项,而组件库中 react 版本依赖都存放在这个选项内。

    npm/yarn link 测试包时报错 Warning: Invalid hook call. Hooks can only be called ...,React,npm,前端,node.js

  • 解决方案

    例如:组件库项目根路径(/Users/xxx/Desktop/design)、测试项目根路径(/Users/xxx/Desktop/testlink)。

    测试项目 中软链接 组件库项目 中安装的 react 版本即可,如果还未解决,再将 react-dom 也进行软链接到测试项目。

    # 1、进入测试项目
    $ cd /Users/xxx/Desktop/testlink
    
    # 2、软链接组件库中安装的 react 版本
    $ npm link /Users/xxx/Desktop/design/node_modules/react
    # (备用)如果还是报错,可在链接 react-dom,但是一般不需要,link react 基本也就解决了。
    $ npm link /Users/xxx/Desktop/design/node_modules/react-dom
    
    # 3、重新跑测试项目,确保组件库项目包正确,可以重新打包,在到测试项目中 link 组件库包,并重启测试测试项目。
    

    还有个解决方案:删除组件库项目 node_modules 文件夹内的 react 包也可以解决,原理都一样,两者存在一个版本的 react 包即可,但是这种方式不推荐,毕竟删了打包组件库时就报错了,还得重新 npm i 安装依赖。文章来源地址https://www.toymoban.com/news/detail-697511.html

到了这里,关于npm/yarn link 测试包时报错 Warning: Invalid hook call. Hooks can only be called ...的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • React的hooks---自定义hooks

    通过自定义 Hook,可以将组件逻辑提取到可重用的函数中,在 Hook 特性之前,React 中有两种流行的方式来共享组件之间的状态逻辑: render props 和 高阶组件 ,但此类解决方案会导致组件树的层级冗余等问题。而自定义 Hook 的使用可以很好的解决此类问题 自定义 Hook 是一个函数

    2024年02月15日
    浏览(30)
  • React hooks详解

    hook 是react 16.8的新增特性 ,他可以让你不在编写class的情况下shiystate以及react的特性 Hooks的出现,首先解决了以下问题: 告别了令人疑惑的生命周期 告别类组件中烦人的this 告别繁重的类组件,回归到了熟悉的函数组件 react 整个思想上面的转变,从“面向对象”的思想转为“

    2024年02月08日
    浏览(36)
  • React Hooks 基本使用

    class 组件如果业务复杂,很难拆分和重构,很难测试;相同业务逻辑分散到各个方法中,逻辑混乱 逻辑复用像 HOC 、 Render Props ,不易理解,学习成本高 React 提倡函数式编程,函数更易拆分,更易测试 但是函数组件太简单,为了增强函数组件的功能,媲美 class 组件: 函数组

    2024年01月21日
    浏览(39)
  • React hooks 大全详情

    hook 是react 16.8的新增特性 ,他可以让你不在编写class的情况下shiystate以及react的特性 Hooks的出现,首先解决了以下问题: 告别了令人疑惑的生命周期 告别类组件中烦人的this 告别繁重的类组件,回归到了熟悉的函数组件 react 整个思想上面的转变,从“面向对象”的思想转为“

    2024年02月08日
    浏览(45)
  • React Hooks 钩子特性

    人在身处逆境时,适应环境的能力实在惊人。人可以忍受不幸,也可以战胜不幸,因为人有着惊人的潜力,只要立志发挥它,就一定能渡过难关。 Hooks 是 React 16.8 的新增特性。它可以让你在不编写 class 组件的情况下使用 state 以及其他的 React 特性。 React Hooks 表现形式是以

    2024年02月05日
    浏览(39)
  • React Hooks 实战案例

    React Hooks 是 React 16.8 版本引入的新特性,它使得在函数组件中也能够使用状态(state)和其他 React 特性。 在 React 之前的版本中,组件要么是函数组件,要么是类组件。函数组件可以使用纯函数的方式编写,但是没有状态(state)和其他 React 特性;类组件则可以拥有状态和其

    2024年02月08日
    浏览(42)
  • 自定义hooks函数

    体会1 1、js文件中定义useXX函数 2、在vue文件中使用useXX函数 体会2 3、useAdd自定义hooks 4、使用

    2024年02月07日
    浏览(35)
  • React hooks源码阅读

    一、版本 react:17.0.2 react-dom: 17.0.2 二、代码仓库 react源码的管理方式是monorepo模式,它把react中相对独立的模块分割出来作为一个软件包(例如:react包、react-dom包、react-server包等等),将所有软件包统一放置在/packages中,这样一个react代码仓库就包含了所有的react模块。源码

    2024年02月04日
    浏览(31)
  • Hooks与事件绑定

    在 React 中,我们经常需要为组件添加事件处理函数,例如处理表单提交、处理点击事件等。通常情况下,我们需要在类组件中使用 this 来绑定事件处理函数的上下文,以便在函数中使用组件的实例属性和方法。 React Hooks 是 React 16.8 引入的一个新特性,其出现让 React 的

    2023年04月16日
    浏览(27)
  • React Hooks解析

    1. react使用hook的意义 Hook 是 React 16.8 的新增特性,它可以让我们在不编写class的情况下使用state以及其他的React特性(比如生命周期)。 class组件与函数式组件: class组件可以 定义自己的state ,用来 保存组件自己内部的状态, 函数式组件不可以,因为函数每次调用都会产生新

    2024年02月08日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包