⊗jsrxPmATDT 54 of 57 menu

Wysyłanie danych za pomocą thunk w Redux

Na poprzednich zajęciach zajmowaliśmy się obsługą żądania POST na naszym fałszywym serwerze. Teraz napiszmy funkcję thunk, która będzie wysyłać żądanie do serwera.

Otwórzmy naszą aplikację z produktami, a w niej plik productsSlice.js. Teraz po thunk fetchProducts za pomocą createAsyncThunk utwórzmy thunk addProduct:

export const addProduct = createAsyncThunk()

Pierwszym parametrem przekażemy do createAsyncThunk 'products/addProduct', a drugim asynchroniczne wywołanie zwrotne, które będzie przyjmować obiekt z danych nowego produktu:

export const addProduct = createAsyncThunk( 'products/addProduct', async (newProduct) => {} )

W kodzie tego wywołania zwrotnego wywołamy klienta, przekazując mu parametry ścieżkę i obiekt z produktem, a następnie zwrócimy dane odpowiedzi:

export const addProduct = createAsyncThunk( 'products/addProduct', async (newProduct) => { const response = await client.post('/fakeServer/products', newProduct) return response.data } )

Teraz poniżej w kodzie spójrzmy na pole reducers dla productsSlice. Wcześniej dodawaliśmy nowy produkt za pomocą reduktora productAdded, w którym mieliśmy metody reducer i prepare. Teraz generujemy niezbędne dane na serwerze i pracujemy z thunk, więc usuniemy tutaj całkowicie reduktor productAdded z kodu. A następnie dodamy do metody extraReducers (na końcu jego kodu) jeszcze jeden dodatkowy reduktor, który w przypadku udanego żądania będzie dodawał do slice'a products nowy produkt prosto z payload akcji (pamiętajmy, że taki kod jest możliwy dzięki niepowtarzalnemu createSlice):

.addCase(addProduct.fulfilled, (state, action) => { state.products.push(action.payload) })

Tak, przy okazji, nie zapomnij usunąć nanoid z linii importu, a productAdded z eksportu akcji na końcu pliku.

Otwórz swoją aplikację ze studentami. Otwórz w niej plik studentsSlice.js. Za pomocą createAsyncThunk utwórz kolejny thunk addStudent, który będzie wysyłał żądanie POST na serwer, aby dodać nowego studenta, jak pokazano na lekcji.

Następnie poniżej wprowadź zmiany dla studentsSlice: usuń całkowicie reduktor studentAdded we właściwości reducers. A w polu extraReducers dodaj dodatkowy reduktor, który będzie dodawał nowego studenta do slice'a students z payload akcji w przypadku udanego żądania, jak pokazano na lekcji.

Polski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wykorzystujemy pliki cookie do działania strony, analizy i personalizacji. Przetwarzanie danych odbywa się zgodnie z Polityką prywatności.
zaakceptuj wszystkie dostosuj odrzuć