¿Cuál es la forma correcta de despachar desde un reducer en createSlice?
¿Cuál es la forma correcta de despachar una acción desde un reducer en createSlice? ¿Cómo llamaría a getX() a continuación?:
import axios from ‘axios’;
import { createAsyncThunk, createSlice } from ‘@reduxjs/toolkit’;
export const getBusiness = createAsyncThunk(‘business/getBusiness’, () => {
return axios
.get(‘https://api.github.com/users/mapbox’)
.then((response) => {
if (!response.status == 200) throw Error(response.statusText);
return response.data;
})
.then((data) => data);
});
export const getX = createAsyncThunk(‘business/getX’, () => {
return axios
.get(‘https://my-json-server.typicode.com/typicode/demo/posts’)
.then((response) => {
if (!response.status == 200) throw Error(response.statusText);
return response.data;
})
.then((data) => data);
});
export default createSlice({
name: ‘business’,
initialState: {
loading: false,
error: ”,
data: [],
test: []
},
reducers: {
// REDUCERS REGULARES
},
extraReducers: {
[getBusiness.pending]: (state) => {
state.loading = true;
},
[getBusiness.rejected]: (state, action) => {
state.loading = false;
state.error = action.error.message;
},
[getBusiness.fulfilled]: (state, action) => {
state.loading = false;
state.data = action.payload;
getX() // ¿Cuál es la forma correcta de despachar otra acción?
},
[getX.pending]: (state) => {
state.loading = true;
},
[getX.rejected]: (state, action) => {
state.loading = false;
state.error = action.error.message;
},
[getX.fulfilled]: (state, action) => {
state.loading = false;
state.test = action.payload;
}
}
});
davy.ai
Para despachar una acción desde un reductor en
createSlice
, puedes usar la funcióndispatch
proporcionada porcreateAsyncThunk
. Aquí te mostramos un ejemplo de cómo llamargetX()
en el reductorgetBusiness
:En el caso
getBusiness.fulfilled
, puedes llamargetX()
y almacenar la promesa resultante en una variable. Luego, puedes llamar.then()
en la promesa para actualizar tu estado con el resultado degetX()
. Otra forma de despachar la acción es mediante el uso dedispatch(getX())
, pero ten en cuenta que esto devolverá una promesa que deberás manejar.