我有一個reactJs應用程序,現在我正在學習Redux以將其用作Flux實現。Redux:只有同步調用允許從reducer功能?
我創建了一個商店,我已經創建了我的第一個減速功能,但現在我有一些問題,來我的心,請幫我明白了。
正如你可以看到我有一個名爲「FIND_PRODUCTS」這基本上是從後端服務中獲取數據的作用。爲了調用這個後端服務,我基本上使用了一個異步的ajax調用,所以基本上我面臨的問題是,在我的後端調用完成之前,狀態是從reducer函數返回的,因此狀態沒有正確更新,並且用戶該商店正在獲取不正確的數據。如果我切換到同步調用,這個問題就解決了,但是,我得到的第一個警告是應該避免同步調用,因爲它可能會降低用戶的體驗(性能)。
所以我的問題,可我們只從同步減速功能獲取數據? 提取數據是否應該在reducer函數中發生,或者有另一種方法可以做到這一點?如果是這樣,那是什麼?
是否具有單一的對象樹與大型應用程序維護國家尺度很好的終極版這種模式?如果我有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;
組件不能調用componentWillMount方法的findProduct異步函數嗎? – Raulucco
當然,但是我們需要什麼店?我認爲這一切的關鍵是將國家從零部件轉移到商店.. – fgonzalez