⊗jsrxPmATADR 49 of 57 menu

Päringu duubeldamise kõrvaldamine Reduxis

See tund on meile kasulik juhul, kui rakenduse käivitamisel duubeldub andmete päringu saatmine ja seejärel tulevad paarid toodetest id-dega, mille tulemusena ilmuvad brauseri konsooli hirmutavad punased hoiatused.

Selle põhjuseks on React 18 ja uuemate versioonide komponentide mountimise eripära arendusrežiimis (dev), kui kasutatakse React.StrictMode (räägitud, et production-režiimis on kõik sellega korras). Esmalt mountitakse komponent, seejärel demountitakse ja mountitakse uuesti. Seetõttu saadetakse päring kaks korda.

Võimalik, et kui te seda materjali õpite, on see topeltmountimine Reactis juba kuidagi muutunud. Me ei süvene põhjalikult, vaid lihtsalt kasutame React hooki useRef, mis aitab meil sellest mööda hiilida.

Avame oma toodete rakenduse, ja selles faili ProductsList.jsx. Impordime sellesse hooki useRef:

import { useEffect, useRef } from 'react'

Ja nüüd muudame veidi järgmist koodiblokki useEffect-iga:

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

Alustuseks tutvustame uut muutujat dataFetch jaoks useRef. Algselt määrame selle omaduse current väärtuseks false. Kui rakendus on juba käivitatud ja vastavalt sellele on päring saadetud, siis omadus current on juba true, mis tähendab, et me lihtsalt väljume funktsioonist ja andmete uuesti pärimist ei toimu. Niisiis, eelmainitud koodijupp on nüüd selline:

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

Nüüd käivitame oma rakenduse uuesti ja leevenduse märgates kaovad punased hoiatused konsoolist, ja näeme toodete loendit ilma dupliteta, nüüd on neid 8, nagu me serveris plaanisime. Nüüd Redux DevToolsis päringuga kaasnevad actionid enam ei kordu.

Avage oma õpilaste rakendus, ja selles fail StudentsList.jsx. Kõrvaldage topeltpäringu probleem vastavalt tunni materjalile, kui teil selline esineb.

Eesti
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Me kasutame saidi toimimiseks, analüüsi ja personaliseerimiseks küpsiseid. Andmete töötlemine toimub vastavalt Privaatsuspoliitikale.
nõustu kõigega häälesta keeldu