React-Hot-Loader v4.6

Há cerca de um mês, o React Hooks foi lançado e imediatamente ficou claro que o React-Hot-Loader estraga tudo de framboesas e não só não é muito compatível com elas, como também quebra o resto do código. Em geral, foi um mês quente ...


Quente

O que tem dentro?


  • Nova API para HMR
  • Suporte completo ao React 16.6 - React.lazy, React.memo e forwardRef
  • Claro ganchos
  • React - dom (o que isso significa)
  • Plug-in do Webpack
  • Automagic ErrorBoundaries
  • Renderização pura
  • "Princípios"

Nova API para HMR


Aqui, quase nada mudou - estava hot - permaneceu hot . Apenas ficou mais curto e inteligente:


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


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

De fato, o novo hot é apenas o antigo, dividido em duas partes. Como resultado, é possível detectar situações quando a primeira parte foi chamada e a segunda não ( detalhes ).


Suporte ao React 16.6


forwardRef simplesmente funciona (ninguém disse que não funcionava antes), o memo será atualizado apesar de ser um memo , mas lazy aprendeu a reimportar seus componentes internos.


E, claro, tudo funciona diretamente do caixão.


Suporte de ganchos de reação


Após o lançamento de 16.7, ficou claro que o problema com Hooks. Infelizmente, projetos grandes como o StoryBook ( problema ) e Gatsby ( problema ) foram afetados por esse desastre.


O problema surgiu da própria natureza do React-Hot-Loader - para enganar o React e impedir a destruição da versão antiga da árvore, o HotLoader envolve cada componente em um invólucro que altera apenas o link para o componente "real" em si.
Obviamente, os SFCs estavam envolvidos em Componentes e tudo quebrou.


De fato, os SFCs se alternaram com os SFCs que retornaram uma instância da Classe. Um recurso "React" não documentado da "fábrica".

A comunidade rapidamente encontrou uma saída (na qual eu não pensei {pureSFC: true} ), felizmente, só tive que mudar uma opção - {pureSFC: true} , e o RHL entraria em um modo mais simples de operação, que foi desativado anteriormente devido a um problema profundo. force-update, que também atualizamos agora.


React-hot-dom


O Hot-Loader sempre tratou de hackear o React, e fez isso sobrecarregando createElement e retornando componentes "proxy" para enganar a verificação dentro do React-Dom . Agora, o Hot-Loader cortará exatamente essa verificação :) Funciona de maneira incrível.


Infelizmente, o react em si não fornece nenhuma API para isso, então lançamos um pacote especial - hot-loader / react-dom com todos os patches necessários.


Colocar o patch é simples:


 // 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 

Para aqueles que não desejam instalar pacotes para canhotos, o pacote vem com o webpack-loader, que corrigirá especificamente sua versão do react-dom.


Carregador de Webpack


O mesmo carregador de webpack que pregamos na versão 4 retornou para nós novamente. Porque


  • Para obter rapidamente o node_modules e fornecer mais informações de código
  • Para corrigir o react-dom
  • Para quem não gosta de babel

Automagic ErrorBoundaries


Erros durante o desenvolvimento são as coisas favoritas, mas ninguém gostava de erros + react-hot-loader - simplesmente não funcionava muito bem e, às vezes, não funcionava.


A partir da versão 4.6, o React-Hot-Loader adiciona componentDidCatch a todos os componentes antes do início da atualização e o remove após a atualização. Os erros podem ser detectados e exibidos "just-in-place".


Parece um pouco, mas esse pouco muda todo o processo de desenvolvimento. E, claro, tudo está sintonizado com o seu gosto.
Repórter de erro


Renderização "pura"


Esse problema sempre ocorreu com o Hot-Loader. Até que eles cutucaram o nariz . Em resumo - no React Dev Tools, você pode clicar com o botão direito do mouse no menu e pular diretamente para o componente ... Mais precisamente (era), não é possível fazer isso


ferramentas de desenvolvimento


Agora existe a opção pureRender , desde que esteja desativada por padrão, o que remove alguns efeitos colaterais do componente que levaram a esse problema.


Infelizmente, isso funciona apenas para componentes "baseados em classe", para SFC é necessário um patch no react-dom, mencionado acima.


Em princípio, agora existe uma oportunidade de praticamente esconder a presença do HotLoader no sistema.


Princípios


Há apenas uma semana, Dan Abramov publicou sua lista de desejos para hot-loader - 22 princípios que um hot-loader deve cumprir para estar “certo” se não for branco e fofo.


Atualmente, 14 pontos estão 100% concluídos e outros 4 a 50%. Total - 17 de 22. Em princípio, não é ruim, e está claro o que precisa ser feito para acabar com o resto.
Quem sabe, talvez depois disso, Dan retorne ao projeto.


Então o que


  • basta atualizar seu carregador quente!
  • substitua o velho hot pelo novo hot , eu sei que soa estranho, mas você me entende.
  • tente corrigir a reação de alguma forma. Isso não é tão necessário, tudo funcionará bem sem essa etapa - mas será muito bom com ela.
  • só isso. Deveria funcionar. Apenas tente.

Com você foi ️


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

Source: https://habr.com/ru/post/pt433122/


All Articles