Задать вопрос
Xaip
@Xaip

Оптимизация fetch запросов в react-redux?

Использую React-redux для создания SPA приложения. Но количество fetch запросов для принятия API огромно, и без оптимизации неозможно. Слышал про ActionCreators, но использовать его не получается. Помогите создать шаблон
// Actions
export function fetchAPI(dispatch, type_reducer, url) {
    dispatch (type_reducer());
    fetch('http://127.0.0.1:8000/api/v0/' + url)
            .then(function (response) {
                if(response.status !== 200) {
                    return;
                }
                response.json().then(json => json.length === 0 || undefined || null ? undefined : json.map(item => item)).then(item => dispatch(type_reducer(true, item)))
            })
}




export function selectFilter(request) {
    return (dispatch) => fetchAPI(dispatch, type_reducer=SelectFilter, url='filter' + request);
}

import {FILTER_CATEGORIES_REQUEST, FILTER_CATEGORIES_SUCCESS} from "../constans/Page";


// ActionCreators
export function SelectFilter(state, item) {
    if (state) {
        return {
            type: FILTER_CATEGORIES_REQUEST
        }
    } else {
        return {
            type: FILTER_CATEGORIES_SUCCESS,
            item
        }
    }
}
  • Вопрос задан
  • 766 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
DarthJS
@DarthJS
SelectFilter - это же не редюсер, это Action и вы в него ничего не передаете.
Насколько я понял, что вы хотите сделать:
dispatch (type_reducer(// сюда передаём данные с респонза));


первый раз вы его используете перед запросом, то есть export function SelectFilter(item) - item будет undefined, и вы вернёте FILTER_CATEGORIES_REQUEST, потом после респонза вы наверное хотите еще раз дёрнуть dispatch (type_reducer(response.data)); - сюда уже даныне передаём, тогда export function SelectFilter(item) { if item возвращаем
{
            type: FILTER_CATEGORIES_SUCCESS,
            item
        }


Если я вас правильно понял
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы