⊗jsrxPmATADR 49 of 57 menu

Eliminação de duplicação de requisição no Redux

Esta lição será útil para nós no caso em que, ao iniciar a aplicação, a requisição de dados é enviada de forma duplicada, e então chegam pares de produtos com os mesmos id, e, como consequência, aparecem terríveis avisos vermelhos no console do navegador.

A causa disso está em uma característica de montagem de componentes no React 18 e superior no modo de desenvolvimento (dev), ao usar React.StrictMode (dizem que no modo de produção está tudo bem com isso). Primeiro, o componente é montado, depois desmontado e montado novamente. Portanto, a requisição é enviada duas vezes.

Possivelmente, quando você estiver estudando este material, esta montagem dupla no React já terá sido alterada de alguma forma. Nós não vamos nos aprofundar em detalhes complexos, mas simplesmente usaremos o hook do React useRef, que nos ajudará a contornar este problema.

Vamos abrir nossa aplicação com produtos, e nela o arquivo ProductsList.jsx. Vamos importar o hook useRef nele:

import { useEffect, useRef } from 'react'

E agora vamos modificar um pouco o seguinte bloco de código com useEffect:

useEffect(() => { if (productStatus === 'idle') { dispatch(fetchProducts()) } }, [productStatus, dispatch])

Para começar, vamos introduzir uma nova variável dataFetch para useRef. Inicialmente, vamos definir sua propriedade current como false. Se a aplicação já tiver sido iniciada e, consequentemente, a requisição tiver sido enviada, então a propriedade current já será true, o que significa que simplesmente sairemos da função e o reenvio da requisição de dados não ocorrerá. Então, o trecho de código mencionado acima agora ficará assim:

const dataFetch = useRef(false) useEffect(() => { if (dataFetch.current) return dataFetch.current = true if (productStatus === 'idle') { dispatch(fetchProducts()) } }, [productStatus, dispatch])

Agora vamos iniciar nossa aplicação novamente e com alívio notar o desaparecimento dos avisos vermelhos no console, e ver a lista de produtos sem duplicatas, agora são 8, como planejamos no servidor. Agora no Redux DevTools, as actions, geradas durante a requisição, não se repetem mais.

Abra sua aplicação com estudantes, e nela o arquivo StudentsList.jsx. Elimine o problema com a requisição dupla, de acordo com o material da lição, se você tiver esse problema.

Português
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Nós usamos cookies para o funcionamento do site, análises e personalização. O processamento de dados é realizado de acordo com a Política de Privacidade.
aceitar todas configurar rejeitar