⊗jsrxPmATADR 49 of 57 menu

Dublikatų pašalinimas užklausose Redux

Ši pamoka mums bus naudinga tuo atveju, jei paleidus programą mums dubliuojasi duomenų užklausų siuntimas, o vėliau ateina produktų poros su vienodais id, ir kaip pasekmė atsiranda baisūs raudoni įspėjimai naršyklės konsoleje.

To priežastis slypi komponentų montavimo ypatybėje React 18 ir aukštesnėse versijose kūrimo režime (dev), naudojant React.StrictMode (sakoma, kad production režime su tuo viskas gerai). Pirmiausia komponentas prisijungia, vėl atsijungia ir vėl prisijungia. Todėl ir užklausa siunčiama du kartus.

Galima, kad kai jūs mokysitės šią medžiagą, šis dvigubas montavimas React jau bus kažkaip pakeistas. Mes nesigilinsime į džiungles, o tiesiog naudosimės React kabluku useRef, kuris mums padės apeiti šį nesusipratimą.

Atidarykime mūsų programą su produktais, o joje failą ProductsList.jsx. Importuokime į jį kabluką useRef:

import { useEffect, useRef } from 'react'

O dabar šiek tiek pakeiskime sekantį bloką kodo su useEffect:

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

Pirmiausia įveskime naują kintamąjį dataFetch skirtą useRef. Iš pradžių nustatykime jo savybę current į false. Jei programa jau buvo paleista ir, atitinkamai, užklausa buvo išsiųsta, tai savybė current jau bus true, vadinasi mes tiesiog išeisime iš funkcijos ir pakartotinės duomenų užklausos nebus. Taigi, aukščiau minėtas kodo gabaliukas dabar bus toks:

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

Dabar vėl paleiskime mūsų programą ir su palengvėjimu pastebėkime raudonų įspėjimų pradingimą konsolėje, ir pamatykime produktų sąrašą be dublikatų, dabar jų 8, kaip mes ir suplanavome serveryje. Dabar Redux DevTools veiksmai, generuojami užklausos metu, daugiau nebesikartoja.

Atidarykite jūsų programą su studentais, o joje failą StudentsList.jsx. Pašalinkite problemą su dviguba užklausa, pagal pamokos medžiagą, jei jūs turite tokią.

Lietuvių
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Mes naudojame slapukus svetainės veikimui, analizei ir personalizavimui. Duomenų apdorojimas vyksta pagal Privatumo politiką.
priimti visus nustatyti atšaukti