⊗jsrxPmATADR 49 of 57 menu

Eliminace duplicitních požadavků v Reduxu

Tato lekce se nám bude hodit v případě, že se při spuštění aplikace duplikuje odeslání požadavku na data, a poté přicházejí páry produktů se stejnými id, a v důsledku toho se v konzoli prohlížeče objevují strašlivá červená varování.

Důvodem je zvláštnost mountování komponent v Reactu 18 a vyšší ve vývojovém režimu (dev), při použití React.StrictMode (říká se, že v production režimu je s tím vše v pořádku). Komponenta se nejprve připojí, poté odpojí a znovu připojí. Proto se požadavek odešle dvakrát.

Je možné, že až budete studovat tento materiál, toto dvojité mountování v Reactu již bude nějak změněno. Nebudeme se pouštět do podrobností, ale jednoduše použijeme React hook useRef, který nám pomůže toto nedorozumění obejít.

Pojďme otevřít naši aplikaci s produkty a v ní soubor ProductsList.jsx. Importujme do něj hook useRef:

import { useEffect, useRef } from 'react'

A nyní mírně upravíme následující blok kódu s useEffect:

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

Nejprve zavedeme novou proměnnou dataFetch pro useRef. Na začátku nastavíme její vlastnost current na false. Pokud se aplikace již spustila a podle toho byl požadavek odeslán, pak vlastnost current již bude true, což znamená, že z funkce jednoduše odejdeme a k opakovanému požadavku na data nedojde. Takže výše zmíněný kousek kódu nyní bude vypadat takto:

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

Nyní znovu spustíme naši aplikaci a s úlevou zaznamenáme zmizení červených varování v konzoli, a uvidíme seznam produktů bez duplikátů, nyní jich je 8, jak jsme naplánovali na serveru. Nyní se v Redux DevTools akce generované při požadavku již neopakují.

Otevřete vaši aplikaci se studenty, a v ní soubor StudentsList.jsx. Odstraňte problém s dvojitým požadavkem podle materiálů lekce, pokud jej máte.

Čeština
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Používáme soubory cookie pro fungování webu, analýzu a personalizaci. Zpracování údajů probíhá v souladu s Zásadami ochrany osobních údajů.
přijmout vše přizpůsobit odmítnout