⊗jsrxPmATADR 49 of 57 menu

Odstránenie duplicitných požiadaviek v Reduxe

Táto lekcia nám bude užitočná v prípade, keď sa pri spustení aplikácie duplikuje odoslanie požiadavky na dáta, a potom prichádzajú páry produktov s rovnakými id, a následne sa objavujú strašné červené varovania v konzole prehliadača.

Príčina tohto je v špecifiká mountovania komponentov v React 18 a vyšších verziách v režime vývoja (dev), pri použití React.StrictMode (hovorí sa, že v production režime je s tým všetko v poriadku). Najprv je komponent pripojený, potom je odpojený a znova pripojený. Preto sa požiadavka odosiela dvakrát.

Je možné, že keď budete študovať tento materiál, toto dvojité mountovanie v Reacte už bude nejakým spôsobom zmenené. Nebudeme sa ponárať do detailov, ale jednoducho teraz použijeme React hook useRef, ktorý nám pomôže obísť tento problém.

Otvorme našu aplikáciu s produktami a v nej súbor ProductsList.jsx. Importujme do neho hook useRef:

import { useEffect, useRef } from 'react'

A teraz trochu zmeňme nasledujúci blok kódu s useEffect:

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

Na začiatok zaveďme novú premennú dataFetch pre useRef. Spočiatku nastavme jej vlastnosť current na false. Ak sa aplikácia už spustila a, následne, požiadavka bola odoslaná, tak vlastnosť current už bude true, čo znamená, že jednoducho opustíme funkciu a k opätovnej požiadavke na dáta nedôjde. Takže, vyššie spomenutý kúsok kódu teraz bude takýto:

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

Teraz znova spustíme našu aplikáciu a s úľavou zaznamenáme zmiznutie červených varovaní v konzole, a uvidíme zoznam produktov bez duplíkátov, teraz ich je 8, ako sme naplánovali na serveri. Teraz v Redux DevTools akcie, generované pri požiadavke, sa už viac neopakujú.

Otvorte vašu aplikáciu so študentmi, a v nej súbor StudentsList.jsx. Odstráňte problém s dvojitou požiadavkou, podľa materiálov lekcie, ak taký u vás existuje.

Slovenčina
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Používame cookies na fungovanie stránky, analýzu a personalizáciu. Spracúvanie údajov prebieha v súlade s Politikou ochrany osobných údajov.
prijať všetky nastaviť odmietnuť