Я занимаюсь разработкой веб-приложения с использованием React + Redux.Сейчас я делаю запрос API с помощью сетевой библиотеки Axios.Я не хочу делать вызов API asyc в компоненте.Как книга, которую я читаю, рекомендуется, я делаю вызов в действиях.
Это мои действия.
export const EVENT_START_FETCHING_LIST = "(EVENT) request list start";
export const EVENT_COMPLETE_FETCHING_LIST = "(EVENT) request list completed";
export const EVENT_THROW_ERROR_FETCHING_LIST = "(EVENT) request list throw error";
import { getHttpClient } from '../memento/getHttpClient';
export const startFetchingEvents = (data) => {
return (dispatch) => {
getHttpClient().get('event/list').then((response) => {
dispatch(completeFetchingEvents(response.data));
}).catch((error) => {
dispatch(throwErrorFetchingEvents({ message: "Error in fetching events from the server", styleClass: "alert alert-danger" }));
})
}
}
export const completeFetchingEvents = (data) => {
return {
type : EVENT_COMPLETE_FETCHING_LIST,
payload : data
}
}
export const throwErrorFetchingEvents = (data) => {
return {
type : EVENT_THROW_ERROR_FETCHING_LIST,
payload : data
}
}
Если я хочу сделать вызов, я просто запускаю подобное действие в компоненте.
this.props.startFetchingEvents()
ПроблемаУ меня есть то, что обновление состояния.У меня есть собственность в штате, называемая «погрузка».Это мой редуктор.
import * as EventListActions from '../actions/event.list.actions';
const DEFAULT_STATE = {
loading: false,
message: null,
events: []
}
export default function (state = DEFAULT_STATE, action) {
switch (action.type) {
case EventListActions.EVENT_START_FETCHING_LIST:
{
//TODO: this event is not triggerd
return { ...state, loading: true, events: [], message: null };
}
case EventListActions.EVENT_COMPLETE_FETCHING_LIST:
{
return { ...state, loading: false, events: action.payload };
}
case EventListActions.EVENT_THROW_ERROR_FETCHING_LIST:
{
return {
...state,
loading: false,
message: {
}
}
}
}
return state;
}
Как вы можете видеть в моем редукторе, я обновляю значение загрузки до true, когда вызывается API.Но, как я уже говорил, эта функция не срабатывает.Другие функции срабатывают.Что не так с моим кодом и как я могу это исправить?