⊗jsrxPmATADR 49 of 57 menu

Reduxда сурўр такрорланишини бартараф этиш

Бущ дарс бизга илова ишга туширилганда, маълумотлар сурўри икки марта юборилиши, сўнгра бир хил id га эга бўлган махсулотлар жуфтлари келиши ва натижада браузер консолида қўрқинчли қизил огоҳлантиришлар пайдо бўлиши ҳолатида фойдали бўлади.

Бунинг сабаби React 18 ва ундан юқори версияларда ишлаб чиқариш (dev) режимида, React.StrictMode ишлатилганда компонентларни ўрнатишнинг хусусиятида ётар (ишлаб чиқариш режимида бу билан ҳаммаси яхши дейишади). Аввал компонент уланади, сўнгра ўчирилади ва яна уланади. Шу сабабдан сурўр икки марта юборилади.

Эҳтимол, сиз бу материални ўрганаётган вақтингизда, React даги бу икки марта ўрнатиш қандайдир шаклда ўзгартирилган бўлади. Биз чуқурликка түшмаймиз, балки бу нотўғриликдан ўтиш учун бизга ёрдам берадиган React ҳуки useRef дан фойдаланамиз.

Келгила, махсулотлар билан иловамизни ochамиз, унинг ичидаги ProductsList.jsx файлини. Унга useRef ҳукини импорт қиламиз:

import { useEffect, useRef } from 'react'

Ва энди useEffect билан келаётган кўд блокини озгина ўзгартирамиз:

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

Аввал useRef учун янги dataFetch ўзгарувчисини киритамиз. Бошланғич ҳолда унинг current хусусиятини false га ўрнаймиз. Агар илова аллақачон ишга туширилган бўлса ва, мос равишда, сурўр юборилган бўлса, current хусусияти аллақачон true бўлади, демак биз фақат функциядан чиқамиз ва маълумотларнинг такрорланган сурўри бўлмайди. Шу сабабдан, юқорида тилга олинган кўд бўлаги энди шундай бўлади:

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

Энди иловамизни яна ишга туширамиз ва консолнинг қизил огоҳлантиришлари йўқолишига рози бўламиз, ва дубльсиз махсулотлар руйхатини кўрамиз, энди улар 8 та, айнан серверда биз режалаштирганимиздек. Энди Redux DevTools да сурўр тарафдан яратилувчи экшенлар бошқа такрорланмайди.

Студентлар билан иловангизни ochинг, унинг ичидаги StudentsList.jsx файлини. Агар сизда мавжуд бўлса, дарс материалларига асосан, икки марта сурўр билан муаммони бартараф этинг.

Ўзбек
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeOʻzbekTiếng Việt
Биз веб-сайт ишлаши, таҳлил қилиш ва персоналлаштириш учун кукидан фойдаланамиз. Маълумотларни қайта ишлаш Махфийлик сиёсатига мувофиқ амалга оширилади.
ҳаммасини қабул қилиш мослаштириш рад этиш