我有一個Redux減速器的偏好設置,我使用流量類型檢查器。我的減速器可以採取兩種類型的動作。一個用於加載初始應用加載時發生的所有偏好。第二種操作類型發生在用戶更新特定首選項時。這是我的減速機的代碼。在那裏我遇到的問題是,當我嘗試做action.prefs.forEach
此時流動拋出一個錯誤說...'prefs': Property not found in 'object type'
流量類型檢查:如何迭代redux操作中可能未定義的屬性?
// @flow
import {
UPDATE_PREF,
LOAD_PREFS_SUCCESS
} from '../actions/prefs';
export type actionType = {
+type: string,
prefs: Array<{_id: string, value: any}>
} | {
+type: string,
id: string,
value: any
};
export default (state: stateType = {}, action: actionType) => {
switch (action.type) {
case LOAD_PREFS_SUCCESS: {
const newState = {};
action.prefs.forEach(p => {
newState[p._id] = p.value;
});
return newState;
}
case UPDATE_PREF: {
return { ...state, [action.id]: action.value };
}
default:
return state;
}
};
正如你可以看到我有兩種類型的操作。加載所有首選項時,該操作具有一系列首選項。 [ { _id: 'color', value: 'blue' } ]
當更新一個首選項時,我得到一個id和一個值。所以,給我兩個具有不同屬性的動作類型,我如何獲得流動來避免在動作流類型中拋出這種變化的錯誤?
謝謝羅斯。不幸的是,這似乎並沒有擺脫這個錯誤。 – yourfavorite
@yourfavorite除了上述更改,請嘗試從我的答案https://stackoverflow.com/a/44640430/368697 –
我無法弄清楚你的例子的哪個部分將解決這個問題,但我想出瞭如何解決flow.org/try上的錯誤感謝你的例子。我創建了一個沒有錯誤的流,但現在的問題是當狀態另一部分的操作被觸發時,它會導致TypeError,因爲它與我的兩個actionType中的任何一個都不匹配。我將爲此創建一個新的SO問題,因爲這是一個不同的問題。我正在用這個解決方案創建一個新的答案,希望它可以在未來幫助其他人。謝謝你的幫助! – yourfavorite