我正在编写我的第一个更大的React / Redux / Meteor App。我知道在流星应用程序中不一定需要Redux,但我想使用它。
我使用Meteor从MongoDB加载记录,然后我想将此对象存储在我的Redux存储中。但是对象嵌套在商店中,我不知道为什么会这样。
到目前为止,这是我的代码:
操作加载远程记录
export const loadRecord = (id) => {
return dispatch => {
Meteor.call('loadRecord', id, (error, result) => {
if (!error) {
dispatch({
type: TYPE,
result
});
} else {
dispatch({
type: TYPE_ERROR,
error,
});
}
});
};
};
Reducer 应该更新我的商店
const initialState = {
singleRecord: {}
};
export function singleRecord(state = initialState, action) {
switch (action.type) {
case TYPE:
return {
...state,
singleRecord: action.result
};
default:
return state;
}
}
在更多商店我希望这样的事情:
singleRecord: {
id:"1223",
text:"abcde"
}
但我得到是:
singleRecord: {
singleRecord {
id:"1223",
text:"abcde"
}
}
所以我的商店得到更新,除了事实之外,一切都按预期工作,我的记录以某种方式嵌套。 我想我错过了一个基本的东西,或者我错了。如果有人可以解释我这是否是预期的行为,或者如果没有,可以告诉我为什么我的代码没有按预期工作,这将是非常好的。
提前致谢
答案 0 :(得分:1)
您想要解开操作的有效负载:
return {
...state,
...action.result
};
或换句话说:
return Object.assign({}, state, action.result);
我不确定您希望在singleRecord
中保存哪些内容,但您完全有可能想要这样做:
return action.result;
此外,您的初始状态应为const initialState = {};
从singleRecord
缩减器返回的对象是存储在singleRecord
状态的对象。