⊗jsrxPmATInr 45 of 57 menu

Introducción a los thunks en Redux

En el capítulo anterior organizamos el trabajo del servidor, la base de datos y el cliente para intercambiar datos. Ahora necesitamos tender el último puente que ayudará a nuestra aplicación Redux organizada 'sincrónicamente' a interactuar con el cliente asíncrono que creamos en la última lección del capítulo anterior, para enviar solicitudes y recibir los datos necesarios en la respuesta.

Como recordamos de las primeras lecciones de la sección anterior, Redux no sabe nada sobre cómo trabajar con lógica asíncrona y para ello usaremos el middleware thunk. Este middleware permite trabajar con las actions enviadas, usar en el código de nuestro thunk los métodos dispatch y getState del store, y también ayudar al método dispatch a trabajar no solo con objetos JS ordinarios, sino también con entidades como funciones y promesas.

Normalmente la función thunk se llama con dos argumentos dispatch y getState (según sea necesario), que se pueden utilizar en el cuerpo de esta función. Con ella se pueden enviar actions ordinarias. También se puede enviar a través de store.dispatch. Un ejemplo de tal función se muestra a continuación:

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)

Ahora abramos nuestra aplicación de productos. Lo primero que debemos obtener del servidor al iniciar la aplicación es la lista de productos. Como normalmente los thunks se escriben en los archivos de slice, abriremos el archivo productsSlice.js.

La buena noticia es que no necesitamos lidiar con la instalación de Redux Thunk, ya que la función configureStore de RTK ya lo hará por nosotros. Por lo tanto, simplemente agreguemos createAsyncThunk a la importación en el archivo:

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

Agreguemos también nuestro cliente a la importación:

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

Y ahora mediante createAsyncThunk creemos nuestro primer thunk para obtener productos, hagámoslo justo después de declarar el objeto initialState:

export const fetchProducts = createAsyncThunk()

El primer parámetro de createAsyncThunk recibirá una cadena para el tipo de action generado, y el segundo, una función callback para payload, que devolverá como resultado ya sea los datos o una promesa con un error (consulte el archivo client.js). En el código de la función llamamos a client.get y le pasamos la ruta que especificamos en el servidor (consulte los parámetros aceptados por http.get en server.js):

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

Abra su aplicación de estudiantes. Abra en ella el archivo studentsSlice.js. Importe en él la función createAsyncThunk para crear thunks, y también client para enviar solicitudes API al servidor.

Inmediatamente después de declarar el objeto initialState, usando createAsyncThunk, cree un thunk fetchStudents para obtener la lista de estudiantes, que enviará una solicitud GET a la dirección /fakeServer/students, especificada en su archivo server.js, y devolverá response.data, como se muestra en los materiales de la lección. Como primer parámetro para createAsyncThunk, especifique la cadena students/fetchStudents para el tipo de action.

Español
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Usamos cookies para el funcionamiento del sitio, análisis y personalización. El procesamiento de datos se realiza de acuerdo con la Política de privacidad.
aceptar todas configurar rechazar