我有一个 reactJs 应用程序,现在我正在学习 Redux 以将其用作 Flux 实现。
我创建了一个商店,并创建了我的第一个减速器功能,但现在我有一些问题浮现在我的脑海中,请帮助我理解。
如您所见,我有一个名为“FIND_PRODUCTS”的操作,它基本上是从后端服务获取数据。要调用这个后端服务,我基本上使用异步 ajax 调用,所以基本上我面临的问题是在我的后端调用完成之前从 reducer 函数返回状态,所以状态没有正确更新,订阅者商店收到不正确的数据。如果我切换到同步调用,这个问题就解决了,但是,我得到的第一个警告是应该避免同步调用,因为它可能会降低用户的体验(性能)。
所以我的问题是,我们只能从 reducer 函数中同步获取数据吗?获取数据应该发生在 reducer 函数中还是有其他方法可以做到这一点?如果有,那是什么?
这种拥有单个对象树来维护状态的 redux 模型是否适用于大型应用程序?如果我有 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;