У меня есть приложение responseJs, и прямо сейчас я изучаю Redux, чтобы использовать его как реализацию Flux.
Я создал магазин, и я создал свою первую функцию-редуктор, но теперь у меня есть несколько вопросов, которые приходят мне в голову, пожалуйста, помогите мне разобраться.
Как видите, у меня есть действие под названием «FIND_PRODUCTS», которое в основном извлекает данные из серверной службы. Чтобы вызвать эту внутреннюю службу, я использую в основном асинхронный вызов ajax, поэтому в основном проблема, с которой я сталкиваюсь, заключается в том, что состояние возвращается из функции редуктора до завершения моего внутреннего вызова, поэтому тогда состояние не обновляется правильно и подписчики на магазин получает неверные данные. Эта проблема решается, если я переключаюсь на синхронный вызов, но тогда первое предупреждение, которое я получаю, заключается в том, что следует избегать синхронного вызова, потому что это может снизить качество обслуживания (производительность) пользователя.
Итак, мой вопрос, можем ли мы получать данные только синхронно из функции редуктора? Должна ли выборка данных происходить в функции редуктора или есть другой способ сделать это? Если так, то, что это?
Хорошо ли масштабируется эта модель сокращения наличия единого дерева объектов для поддержания состояния с большими приложениями? Если у меня есть 1000 действий, переключатель в моей функции редуктора будет огромным! Как этого избежать?
Спасибо!!
const initialState = {
availableLocales: [{text: 'En'}, {text: 'Es'}, {text: 'Fr'}],
selectedLocale: 'En',
translations: i18n.getTranslations(),
products: []
};
const reducer = (state = initialState, action = {type: 'NONE'})=> {
//To make the reducer a pure function
deepFreeze(state);
deepFreeze(action);
switch (action.type) {
case 'SWITCH_LOCALE':
let newState = Object.assign({}, state, {
selectedLocale: action.locale,
translations: i18n.getTranslations(action.locale)
});
return newState;
case 'FIND_PRODUCTS':
let newState = Object.assign({}, state, {
products:ProductHelper().findProductsByProductType(action.productType)
});
return newState;
default:
return state
}
return state;
}
// Create a Redux store holding the state of your app.
// Its API is { subscribe, dispatch, getState }.
const store = createStore(reducer);
// You can subscribe to the updates manually, or use bindings to your view layer.
store.subscribe(() =>
console.log(store.getState())
);
export default store;