我试图让我的 redux reducers 在更新状态时更简单。例如,下面是一个 reducer :
const initialState = {
emails: {
id: {
emailAddress: null,
emailBody: null,
emailSubject: null,
},
},
calls: {},
};
function messaging(state = initialState, action) {
switch (action.type) {
case actionTypes.SET_EMAIL_ADDRESS:
return {
...state,
emails: {
...state.emails,
[action.id]: {
emailAddress: [action.emailAddress]
},
},
};
default:
return state;
}
}
export default messaging;
我试着写下面的 reducer,但是 webstorm 提示说这不是正确的表示法。我究竟做错了什么?此外,非常感谢任何有关如何以更清洁的方式更新状态的建议。谢谢!
case actionTypes.SET_EMAIL_ADDRESS:
return {
...state,
emails[action.id]: {
...state.emails[action.id],
emailAddress: [action.emailAddress]
},
};
最佳答案
基于你的初始状态
并避免覆盖 emailBody
和 emailSubject
的现有值。
我会这样重写:
case actionTypes.SET_EMAIL_ADDRESS:
const currentEmails = state.emails;
const emailId = action.id;
const emailAddress = action.emailAddress;
const email = { ...currentEmails[emailId], emailAddress };
const emails = { ...currentEmails, [emailId]: email };
return { ...state, emails };
使用描述性名称总是值得的!
关于javascript - 更新 redux 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52683020/