⊗jsrxPmATInr 45 of 57 menu

Introduktion til thunks i Redux

I det forrige kapitel organiserede vi arbejdet med server, database og klient til datudveksling. Nu er vi nødt til at etablere den sidste forbindelse, som vil hjælpe vores 'synkront' organiserede Redux applikation med at interagere med den asynkrone klient, som vi oprettede i den sidste lektie i forrige kapitel, for at sende forespørgsler og modtage de nødvendige data som svar.

Som vi husker fra de første lektioner i det forrige afsnit, ved Redux intet om at håndtere asynkron logik, og til dette vil vi bruge thunk middleware. Denne middleware tillader os at arbejde med dispatched actions, bruge dispatch og getState metoder fra store i koden af vores thunk, samt hjælpe dispatch metoden med at arbejde ikke kun med almindelige JS objekter, men også med enheder som funktioner og promises.

Normalt kaldes en thunk-funktion med to argumenter dispatch og getState (om nødvendigt), som kan bruges i kroppen af denne funktion. Med den kan man sende almindelige actions. Den kan også sendes via store.dispatch. Et eksempel på en sådan funktion er vist nedenfor:

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)

Lad os nu åbne vores produktapplikation. Den første ting, vi skal have fra serveren, når applikationen startes, er produktlisten. Da thunks normalt skrives i slice-filer, åbner vi filen productsSlice.js.

Den gode nyhed er, at vi ikke behøver at installere Redux Thunk, da funktionen configureStore fra RTK allerede gør dette for os. Så lad os blot tilføje createAsyncThunk til importen i filen:

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

Lad os også tilføje vores klient til importen:

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

Og nu ved hjælp af createAsyncThunk opretter vi vores første thunk til at hente produkter, gør dette umiddelbart efter erklæringen af objektet initialState:

export const fetchProducts = createAsyncThunk()

Den første parameter for createAsyncThunk vil være en streng for typen af den genererede action, og den anden er en callback-funktion for payload, som som resultat vil returnere enten data eller et promise med en fejl (se filen client.js). I funktionens kode kalder vi client.get og sender den stien, som vi specificerede på serveren (se de accepterede parametre for http.get i server.js):

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

Åbn din studerendeapplikation. Åbn filen studentsSlice.js i den. Importer funktionen createAsyncThunk for at oprette thunk, samt client for at sende API-forespørgsler til serveren.

Umiddelbart efter erklæringen af objektet initialState opret en thunk ved hjælp af createAsyncThunk fetchStudents for at hente listen over studerende, som vil sende en GET-forespørgsel til adressen /fakeServer/students, specificeret i din fil server.js, og returnere response.data, som vist i lektionens materialer. Som første parameter for createAsyncThunk angiv strengen students/fetchStudents for action-typen.

Dansk
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Vi bruger cookies til webstedets funktion, analyse og personalisering. Behandling af data foregår i henhold til Fortrolighedspolitikken.
accepter alle tilpas afvis