⊗jsrxPmATInr 45 of 57 menu

Introduktion till thunks i Redux

I föregående kapitel satte vi upp servern, databasen och klienten för datautbyte. Nu måste vi bygga den sista bron som hjälper vårt 'synkront' organiserade Redux -applikation att interagera med den asynkrona klienten som vi skapade i den sista lektionen i föregående kapitel, för att skicka förfrågningar och få nödvändig data i svaret.

Som vi minns från de första lektionerna i föregående avsnitt, vet Redux inget om att hantera asynkron logik och för detta kommer vi att använda thunk middleware. Denna middleware möjliggör att arbeta med skickade actions, använda dispatch och getState metoder från store i vår thunk-kod, och hjälper även metoden dispatch att fungera inte bara med vanliga JS-objekt, utan även med entiteter som funktioner och promiser.

Vanligtvis anropas thunk-funktionen med två argument dispatch och getState (om nödvändigt), som kan användas i funktionens kropp. Med den kan man skicka vanliga actions. Den kan också skickas via store.dispatch. Ett exempel på en sådan funktion visas nedan:

const changeColorThunk = (dispatch, getState) => { const colorBefore = getState() console.log(`Old Color: ${colorBefore.color}`) dispatch(changeColor()) const colorAfter = getState() console.log(`New Color: ${colorAfter.color}`) } store.dispatch(changeColorThunk)

Låt oss nu öppna vår produktapplikation. Det första vi måste få från servern när applikationen startas är produktlistan. Eftersom thunks vanligtvis skrivs i slice-filer, öppnar vi filen productsSlice.js.

Den glada nyheten är att vi inte behöver installera Redux Thunk, eftersom funktionen configureStore från RTK redan gör detta åt oss. Så låt oss bara lägga till createAsyncThunk i importen i filen:

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

Låt oss också lägga till vår klient i importen:

import { client } from '../../api/client'

Och nu med hjälp av createAsyncThunk skapar vi vår första thunk för att hämta produkter, vi gör detta direkt efter deklarationen av objektet initialState:

export const fetchProducts = createAsyncThunk()

Den första parametern för createAsyncThunk kommer att ta en sträng för typen av genererad action, och den andra - en callback-funktion för payload, som kommer att returnera antingen data eller ett promise med ett fel (se filen client.js). I funktionens kod anropar vi client.get och skickar sökvägen som vi angav på servern (se de accepterade parametrarna för http.get i server.js):

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

Öppna din studentapplikation. Öppna filen studentsSlice.js i den. Importera funktionen createAsyncThunk för att skapa thunk, samt client för att skicka API-förfrågningar till servern.

Direkt efter deklarationen av objektet initialState skapa en thunk med hjälp av createAsyncThunk fetchStudents för att hämta listan över studenter, som skickar en GET-förfrågan till adressen /fakeServer/students, specificerad i din fil server.js, och returnerar response.data, som visas i lektionens material. Som första parameter för createAsyncThunk, ange strängen students/fetchStudents för action-typen.

Svenska
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Vi använder kakor för webbplatsens funktion, analys och personalisering. Behandling av data sker i enlighet med Integritetspolicyn.
acceptera alla anpassa avvisa