React-Hot-Loader v4.6

大约一个月前,React Hooks出现了,并且立即变得很清楚,React-Hot-Loader破坏了所有覆盆子,不仅与它们不十分兼容,而且还破坏了其余代码。 总的来说,这是一个炎热的月份...


热卖

里面有什么?


  • HMR的新API
  • 完全支持React 16.6-React.lazy,React.memo和forwardRef
  • 当然是钩子
  • React-dom(无论什么意思)
  • Webpack插件
  • 自动魔术错误边界
  • 纯渲染
  • “原则”

HMR的新API


在这里,几乎没有什么变化-天气hot -仍然hot 。 变得更短,更聪明:


之前
 import {hot} from 'react-hot-loader'; .... export default hot(module)(MyComponent) 


现在
 import {hot} from 'react-hot-loader/root'; .... export default hot(MyComponent) 

实际上,新的hot只是旧的,分为两个部分。 结果,可以检测到调用第一部分时调用第二部分而不调用第二部分的情况( 详细信息 )。


React 16.6支持


forwardRef可以正常工作(没有人说他们以前没有工作过),即使它是memomemo也会被更新,但是lazy学会了重新导入其内部。


当然,一切都可以在棺材中正常进行。


React钩子支持


16.7发布后,很明显,Hooks遇到了麻烦。 不幸的是,诸如StoryBook( 问题 )和Gatsby( 问题 )之类的大型项目受到了这次灾难的影响。


问题源于React-Hot-Loader的本质-为了欺骗React并防止破坏树的旧版本,HotLoader将每个组件包装在包装器中,该包装器仅将链接更改为自身内部的“真实”组件。
当然,SFC被包裹在Components中,一切都崩溃了。


实际上,SFC与返回了Class实例的SFC互转。 一个非常没有记载的“工厂” React功能。

社区很快找到了一条出路(我自己本人并没有立即想到),幸运的是,我只需要更改一个选项- {pureSFC: true} ,RHL就会进入一种更简单的操作模式,该操作先前由于存在{pureSFC: true}问题而被关闭。强制更新,我们现在也进行了更新。


反应热区


Hot-Loader一直是关于入侵 React的,并且通过重载createElement并返回“代理”组件来欺骗React-Dom内部的检查来实现这一点。 现在,Hot-Loader会检查一下这个检查方法:)它的工作原理令人惊讶。


不幸的是,react本身并未为此提供任何API,因此我们发布了一个特殊的程序包-hot-loader / react-dom,其中包含所有必要的补丁。


放置补丁很简单:


 // this would always work yarn add @hot-loader/react-dom@npm:react-dom // or change your webpack config alias: { 'react-dom': '@hot-loader/react-dom' } // or do the same with package.json to enable it in parcel 

对于那些不想安装左手软件包的用户,该捆绑包随附了webpack-loader,该软件包将专门修补您的react-dom版本。


Webpack加载器


我们在版本4中指定的同一webpack加载器再次返回给我们。 怎么了


  • 快速掌握node_modules并提供更多代码信息
  • 修补反应场
  • 对于那些不喜欢通天塔的人

自动魔术错误边界


开发过程中的错误是最喜欢的事情,但是没有人喜欢错误+ react-hot-loader-它工作得并不好,有时甚至根本不起作用。


从4.6版本开始,React-Hot-Loader将在更新开始之前将componentDidCatch添加到所有组件,并在更新之后将其删除。 可以捕获错误并“就地”显示。


看起来有点琐事,但是这个琐事改变了整个开发过程。 当然,一切都可以根据您的口味进行调整。
错误报告者


“纯”渲染


热装载器一直存在此问题。 直到他们戳他们的鼻子 。 简而言之-在React Dev Tools中,您可以在菜单上单击鼠标右键,然后直接跳到该组件...更确切地说,您不能执行此操作


开发工具


现在有pureRender选项,只要默认情况下将其关闭即可,该选项从Component中消除了导致此问题的一些副作用。


不幸的是,这仅适用于“基于类”的组件,对于SFC,需要在Reactdom中添加补丁,如上所述。


原则上,现在有机会实际上隐藏系统中是否存在HotLoader。


原则


就在一周前,丹·阿布拉莫夫(Dan Abramov)公布了他的热加载器愿望清单 -热加载器必须满足的22条原则,以确保“正确”(即使不是白色且蓬松)。


目前,有 14分是100%完成的,另外4分是50%。 总计-22分中的17分。原则上来说还不错,很显然需要做些什么才能完成其余的工作。
谁知道,也许Dan会回到项目中。


那又怎样


  • 只需升级您的热加载器!
  • 用新的hot替换旧的hot ,我知道这听起来很奇怪,但是您了解我。
  • 尝试以某种方式修补react-dom。 这样做不是必需的,没有此步骤,一切都将很好地工作-但这样做会很好。
  • 仅此而已。 它应该工作。 试一试。

和你在一起


https://github.com/gaearon/react-hot-loader

Source: https://habr.com/ru/post/zh-CN433122/


All Articles