⊗jsrxPmATTRC 55 of 57 menu

Kuonyesha Matokeo ya Kazi ya Thunk katika Sehemu ya programu katika Redux

Katika somo lililopita tulitumia ombi la POST kwa kutumia thunk addProduct. Sasa hebu tuonyeshe matokeo ya kazi yake katika sehemu ya programu.

Washa programu yetu ya bidhaa, na ndani yake faili NewProductForm.jsx, kwa sababu hii sehemu ya programu inahusika na kuongeza bidhaa mpya. Tuangalie mistari yenye viingizo. Badilisha kiingizo cha kitendo productAdded, na kiingizo cha thunk addProduct:

import { addProduct } from './productsSlice'

Sasa, kwa kuwa hatufuatilii kwenye kipande cha hali statusi 'pending' ya ombi, hebu tufanye hivi, ili mtumiaji aweze kubonyeza kitufe cha kuokoa bidhaa mara moja tu, kwani hatuitaji maombi yanayorudiwa yale yale. Kwa hili tutaunda hali nyingine ya ndani:

const [requestStatus, setRequestStatus] = useState('idle')

Kisha baada ya vishughulikia na kabla ya kitendo onSaveProductClick tuandike msimbo, ambao utakuwa unaangalia, je sehemu zote za fomu zimejazwa na statusi ya ombi iko katika 'idle':

const canBeSaved = [name, desc, price, amount, sellerId].every(Boolean) && requestStatus === 'idle'

Kisha tutabadilisha msimbo wa onSaveProductClick. Kwanza hii itakuwa kitendo cha asynchronosi na kitatekelezwa, kama sharti lililotajwa hapo juu ni kweli:

const onSaveProductClick = async () => { if (canBeSaved) {} }

Licha ya kwamba katika kipande cha hali hatufuatilii statusi 'rejected', bado tunaweza kuonyesha kwenye konsoli kosa, kwa hili tutatumia muundo try-catch. Pia hapa tutaongeza na finally, ili baada ya ombi kutekelezwa tena kuweka hali ya ndani kuwa 'idle':

const onSaveProductClick = async () => { if (canBeSaved) { try { } catch (err) { console.error(save product error: , err) } finally { setRequestStatus('idle') } } }

Tumemaliza na vitalu vya catch na finally, hebu tuandike msimbo wa kitengo cha try. Hapa tunaweka statusi ya ndani kuwa 'in pogress', hadi tutakapopata jibu lolote kutokana na kazi ya thunk, kisha tutumie thunk yetu addProduct. Kutumia muundo try-catch kulingana na aina ya jibu kutatusaidia kitendo cha RTK unwrap, ambacho kinaongeza kwa ahadi iliyorejeshwa. Kisha, ikiwa ombi lilifanikiwa tunaweka hali za ndani katika hali zao za kwanza. Msimbo kamili wa onSaveProductClick utakuwa kama hii:

const onSaveProductClick = async () => { if (canBeSaved) { try { setRequestStatus('in progress') await dispatch( addProduct({ name, desc, price, amount, seller: sellerId })).unwrap() setName('') setDesc('') setPrice(0) setAmount(0) setSellerId('') } catch (err) { console.error('save product error: ', err) } finally { setRequestStatus('idle') } } }

Washa programu yetu na tujaribu kuongeza bidhaa mpya. Kama unavyoona, katika kesi ya ombi lililofanikiwa sehemu husafishwa na bidhaa mpya inaongezwa kwenye orodha ya bidhaa. Pia angalia kivinjari kwenye Redux DevTools na uzipitie vitab wake, angalia vitendo na jinsi hali yako inavyobadilika.

Washa programu yako ya wanafunzi. Washa ndani yake faili NewStudentForm.jsx. Ongeza hali nyingine ya ndani requestStatus, na uiweke mwanzoni kuwa 'idle'. Ukishasomea nyenzo za somo, weka kigezo canBeSaved, ambacho kwa kutumia hicho kitufe cha kuokoa data mpya ya mwanafunzi kitafanya kazi/kutofanya kazi, kulingana na thamani ya requestStatus na kujazwa kwa sehemu.

Andika msimbo wa asynchronosi wa onSaveStudentClick, ambao utabadilisha thamani ya requestStatus kulingana na hali, utumie thunk addProduct na data ya mwanafunzi mpya, usafishe sehemu katika kesi ya ombi lililofanikiwa na uonyeshe kwenye konsoli kosa katika kesi ya kushindwa, kama ilivyoonyeshwa kwenye somo. Tumia kwa hili muundo try-catch na kitendo cha RTK unwrap.

Washa programu yako, ongeza mwanafunzi mpya na uhakikishe kuwa yote yanafanya kazi.

Kiswahili
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Tunatumia kuki kwa ajili ya uendeshaji wa tovuti, uchambuzi na ubinafsishaji. Usindikaji wa data unafanyika kulingana na Sera ya Faragha.
kubali yote sanidi kataa