Redux-də action göndərmək və useDispatch hook-u
Biz Redux tətbiqi üçün demək olar ki, bütün tərkib hissələrini həyata keçirdik. Yalnız React komponentindən action göndərməni anlamaq qalır. Gəlin başlayaq.
Məhsullarla olan tətbiqimizi açın.
NewProductForm komponentinin formasında
bizim yeni məhsulun məlumatlarını yadda saxlayan
düymə var. Gəlin ona klik işləyicisi əlavə edək.
Onun üzərinə kliklədikdə onSaveProductClick
işləyicisi işləsin:
<button type="button" onClick={onSaveProductClick}>
save
</button>
Yeni məhsul yaradarkən bizim onun üçün yeni id ehtiyacımız olacaq. Biz onu çox tanınan nanoid kitabxanası vasitəsilə yaradacağıq. Yeri gəlmişkən, onu quraşdırmaq lazım deyil, çünki o artıq RTK paketi ilə gəlir. Gəlin nanoid-i import-a əlavə edək:
import { nanoid } from '@reduxjs/toolkit'
Həmçinin biz xatırlayırıq ki, state-i dəyişməyin yeganə yolu
dispatch metodunu çağırmaq və ona action obyektini ötürməkdir.
Bu metoda çatmaq üçün biz
React-Redux-un useDispatch hook-unu tətbiq edəcəyik.
Gəlin onu da import edək:
import { useDispatch } from 'react-redux'
NewProductForm funksiyasının kodunda onun üçün
dəyişəni dispatch lokal state-lərimiz üçün dəyişənləri
təyin etdikdən dərhal sonra təyin edək:
const dispatch = useDispatch()
Həmçinin bizim əvvəlki dərsdə əldə etdiyimiz
action creator productAdded-i import etmək lazımdır:
import { productAdded } from './productsSlice'
İndi biz onSaveProductClick işləyici funksiyasının özünü yaza bilərik.
Bunu return əmrindən əvvəl edək:
const onSaveProductClick = () => {}
Funksiyanın daxilində biz dispatch-i çağırırıq,
action obyektini formalaşdırırıq, onun payload xüsusiyyətinə
yaradılmış id, ad, təsvir, qiymət və məhsulun miqdarı düşəcək.
Bütün bu məlumatları biz lokal state-lərdən götürürük.
Eyni zamanda, əvvəlcə biz şərtdə bütün sahələrin doldurulub-doldurulmadığını
yoxlayırıq - yalnız bu halda dispatch-i çağırırıq. Sonda
biz lokal state-ləri ilkin vəziyyətinə qaytarırıq:
const onSaveProductClick = () => {
if (name && desc && price && amount) {
dispatch(
productAdded({
id: nanoid(),
name,
desc,
price,
amount
})
)
setName('')
setDesc('')
setPrice(0)
setAmount(0)
}
}
İndi tətbiqimizi işə salaq, forma sahələrinə
məlumat daxil edək və yadda saxla düyməsinə klik edək.
Ura, səhifənin aşağısında yeni məhsul peyda oldu.
Redux DevTools-u açsaq, onun içində Inspector vərəqini açsaq, görərik ki, solda
@@INIT-dən əlavə bizim action
products/productAdded də peyda olub. Sağ tərəfdə
biz Action və State vərəqləri üzərində klikləyə bilərik,
@@INIT və products/productAdded arasında keçid edə bilərik.
İndi görərik ki, yeni məhsulumuz əlavə olunur. Həmçinin Action vərəqində
biz createSlice vasitəsilə avtomatik yaradılmış action-u görürük
(məsələn, Raw üzərində klikləyin). Ura: onu əl ilə yazmaq məcburiyyətində qalmadıq.
Tələbələrlə olan tətbiqinizi açın,
sonra isə NewStudentForm.jsx faylını açın, yadda saxla
düyməsinə klik işləyicisi əlavə edin.
Bütün lazımi import-ları yazın və
dərsdə göstərildiyi kimi dispatch metodunu tətbiq edərək
onSaveStudentClick işləyici funksiyasını yazın.
Tətbiqi işə salın, forma sahələrinə məlumat daxil edin və yadda saxla düyməsinə klik edin. Əmin olun ki, səhifənin aşağısında yeni tələbə əlavə olunub.
Redux DevTools-u açın və Action və State vərəqləri arasında gəzinin, əmin olun ki, yeni tələbə obyekti əlavə olunur. Yaranan action obyektinə baxın, onu bu tapşırığın cavabında göndərin.