⊗jsrxPmRDPAD 26 of 57 menu

Redux'ta Action Nesnesi için Veri Hazırlama

Son zamanlarda sizinle, createSlice fonksiyonunun action.payload oluştururken bir argüman beklediğini konuşuyorduk. Bir yandan bu onun kullanımını kolaylaştırırken, diğer yandan action nesnesinin içeriğini hazırlamak için ekstra işlemler gerektirebilir.

Hadi ürün uygulamamızı açalım, ve içindeki NewProductForm.jsx dosyasını açalım. Şu kod satırına dikkat edin:

dispatch(productAdded({ id: nanoid(), name, desc, price, amount }))

Burada payload nesnesini doğrudan React bileşeninde oluşturuyoruz ve onu productAdded action'ına iletiyoruz. Ya aynı action'ı birden fazla bileşenden göndermemiz gerekirse veya oluşturma mantığı karmaşık hale gelirse? Ideal olarak bileşenimizin bu action için payload içindeki nesnenin nasıl göründüğünü bilmemesi gerekir. Ayrıca sürekli kod tekrarından da hoşlanmıyoruz.

Bu sorunları çözmemize yine ünlü createSlice'ımız yardımcı olabilir, çünkü bir reducer yazarken, içinde çeşitli mantık yazabildiğimiz, rastgele sayılar üretebildiğimiz prepare callback fonksiyonunu kullanmamıza izin verir. Bu durumda reducer alanı için değer aşağıdaki nesne şeklinde temsil edilebilir:

{reducer, prepare}

Hadi productsSlice.js dosyamızı açalım ve productAdded reducer'ı için kodu değiştirelim. Şu kod parçası:

productAdded(state, action) { state.push(action.payload) },

Bunu, reducer fonksiyonunun store'daki state'i güncellemekle, prepare fonksiyonunun ise oluşturulmuş id ve diğer verilerimizle payload nesnesini döndürmekle görevli olduğu şu hale getireceğiz:

productAdded: { reducer(state, action) { state.push(action.payload) }, prepare(name, desc, price, amount) { return { payload: { id: nanoid(), name, desc, price, amount, }, } }, },

Artık id'yi bileşende değil, burada oluşturacağımız için, nanoid'i import'a ekleyelim:

import { createSlice, nanoid } from '@reduxjs/toolkit'

Son olarak NewProductForm.jsx dosyasında değişiklik yapalım. Şu satır yerine:

dispatch(productAdded({ id: nanoid(), name, desc, price, amount }))

İhtiyacımız olan verileri sadece virgülle ilettiğimiz (bu dosyada import'tan nanoid'i kaldırmayı unutmayın) şu satır olacak:

dispatch(productAdded(name, desc, price, amount))

Uygulamayı çalıştıralım, ardından yeni bir ürün oluşturalım ve hiçbir şeyi bozmadığımızdan emin olalım.

Öğrenci uygulamanızı açın. StudentsSlice.js dosyasında studentAdded reducer'ınızı, derste gösterildiği gibi {reducer, prepare} nesnesi şeklinde olacak şekilde yeniden yazın.

NewStudentForm.jsx dosyasında, derste gösterildiği gibi ilgili değişiklikleri yapın. Uygulamayı çalıştırın ve her şeyin eskisi gibi çalıştığından emin olun.

Türkçe
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenЎзбекOʻzbekTiếng Việt
Web sitesinin çalışması, analiz ve kişiselleştirme için çerezleri kullanıyoruz. Veri işleme, Gizlilik Politikası'na uygun olarak gerçekleşir.
tümünü kabul et özelleştir reddet