⊗jsrxPmATADR 49 of 57 menu

Duplikált lekérdezések eltávolítása Redux-ban

Ez a lecke akkor lesz hasznos számunkra, ha az alkalmazás indításakor duplikálódik az adatlekérdezés kérése, majd párosával érkeznek termékek azonos id-val, és ennek következtében ijesztő piros figyelmeztetések jelennek meg a böngésző konzoljában.

Ennek oka a React 18 és afölötti verzióiban lévő komponens mountolás sajátosságában rejlik fejlesztői módban (dev), amikor a React.StrictMode-ot használjuk (azt mondják, production módban minden rendben ezzel). Először a komponens csatlakozik, majd lecsatlakozik és újra csatlakozik. Ezért küldődik el a lekérdezés két alkalommal.

Lehetséges, hogy amikor ezt az anyagot tanulod, ez a kettős mountolás a React-ban már valahogy megváltozott. Nem fogunk belemélyülni a részletekbe, hanem egyszerűen csak használni fogjuk a React useRef hook-ot, amely segít nekünk megkerülni ezt a problémát.

Nyissuk meg a termékek alkalmazásunkat, és benne a ProductsList.jsx fájlt. Importáljuk bele a useRef hook-ot:

import { useEffect, useRef } from 'react'

És most módosítsuk kissé a következő useEffect kódblokkot:

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

Kezdjük azzal, hogy bevezetünk egy új dataFetch változót a useRef számára. Kezdetben állítsuk a current tulajdonságát false-ra. Ha az alkalmazás már elindult és ennek megfelelően a lekérdezés elküldésre került, akkor a current tulajdonság már true lesz, ami azt jelenti, hogy egyszerűen kilépünk a függvényből, és az adatok ismételt lekérése nem fog megtörténni. Tehát a fent említett kódrész most így fog kinézni:

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

Most indítsuk újra az alkalmazásunkat és megkönnyebbülve vegyük észre a piros figyelmeztetések eltűnését a konzolon, és lássuk a termékek listáját duplikációk nélkül, most 8 darab van belőlük, ahogyan a szerveren terveztük. Most a Redux DevTools-ban a lekérdezés során generált action-ök már nem ismétlődnek.

Nyisd meg a diákok alkalmazásodat, és benne a StudentsList.jsx fájlt. Szüntesd meg a kettős lekérdezés problémáját a lecke anyagának megfelelően, ha ilyen problémád adódna.

Magyar
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
A weboldal működéséhez, elemzéshez és személyre szabáshoz sütiket használunk. Az adatfeldolgozás a Adatvédelmi irányelvek szerint történik.
összes elfogadása beállítás elutasítás