⊗jsrxPmATADR 49 of 57 menu

Dublikātu pieprasījumu novēršana Redux

Šī nodarbība mums noderēs gadījumā, ja, palaižot lietotni, mums dublējas datu pieprasījuma sūtīšana, un pēc tam ierodas produktu pāri ar identiskiem id, un kā sekas pārlūkprogrammas konsolē parādās biedējoši sarkani brīdinājumi.

Iemesls tam slēpjas React komponentu montēšanas īpatnībā React 18 versijā un augstāk izstrādes režīmā (dev), izmantojot React.StrictMode (stāsta, ka production režīmā ar to viss kārtībā). Vispirms komponents tiek pieslēgts, pēc tam atslēgts un atkal pieslēgts. Tāpēc pieprasījums tiek sūtīts divreiz.

Iespējams, kad jūs mācīsities šo materiālu, šī dubultā montēšana React jau būs kaut kā mainīta. Mēs neiedziļināsimies detaļās, bet vienkārši izmantosim React hook useRef, kas mums palīdzēs apiet šo nepilnību.

Atvērsim mūsu produktu lietotni, un tajā failu ProductsList.jsx. Importēsim tajā hook useRef:

import { useEffect, useRef } from 'react'

Un tagad nedaudz mainīsim nākamo bloku ar useEffect:

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

Sākumā ieviest jaunu mainīgo dataFetch priekš useRef. Sākotnēji iestatām tā īpašību current uz false. Ja lietotne jau ir palaidusies un, attiecīgi, pieprasījums bija nosūtīts, tad īpašība current jau būs true, kas nozīmē, ka mēs vienkārši iziesim no funkcijas un atkārtotas datu pieprasīšanas nenotiks. Tātad, iepriekš minētais koda gabals tagad būs šāds:

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

Tagad vēlreiz palaidīsim mūsu lietotni un ar atvieglojumu atzīmēsim sarkano brīdinājumu pazušanu konsolē, un ieraudzīsim produktu sarakstu bez dublikātiem, tagad to ir 8, kā mēs to plānojām serverī. Tagad Redux DevTools darbības, kas ģenerējas pieprasījuma laikā, vairs neatkārtojas.

Atveriet savu studentu lietotni, un tajā failu StudentsList.jsx. Novērsiet problēmu ar dubulto pieprasījumu, saskaņā ar nodarbības materiālu, ja jums tāda ir.

Latviešu
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Mēs izmantojam sīkdatnes, lai nodrošinātu vietnes darbību, analīti un personalizāciju. Datu apstrāde notiek saskaņā ar Konfidencialitātes politiku.
pieņemt visus iestatīt noraidīt