reactjs - 在 Redux 中,如何只更新状态对象的一部分?
问题描述
我仍然在关注 Redux,想知道我的部分更新状态对象的解决方案是否是最好的方法。
这是一个示例,在我的操作中,我有两个函数——getA 和 getB,它们共享相同的状态,并且每个只更新状态的一部分。然后我将现有状态传递给我的减速器。
// Action
export function getA() {
return (dispatch, getState) => {
const existing = getState().myReducer.myObj;
dispatch({type: PENDING, existing})
// ... Fetch data "A" from API
// On success...
dataA => dispatch({type: CASE_A, existing, dataA})
}
};
export function getB() {
return (dispatch, getState) => {
const existing = getState().myReducer.myObj;
// ... Fetch data "B" from API
// On success...
dataB => dispatch({type: CASE_B, existing, dataB})
}
};
// Reducer
initialState = {
...
myObj: {
keyA: null,
keyB: null
}
};
export default function myReducer(state = initialState, action) {
switch(action.type) {
case PENDING:
return {
...state,
myObj: {
...action.existing
}
}
case CASE_A:
return {
...state,
myObj: {
...action.existing
keyA: action.dataA
}
}
case CASE_B:
return {
...state,
myObj: {
...action.existing
keyB: action.dataB
}
}
// ...
}
};
一切正常,现有的 myObj 被传递到挂起状态,然后根据调用的操作更新 A 或 B。
我的问题是通过行动来承载现有状态的最佳方法?
解决方案
绝对不是你已经existing state
在行动state.myObj
中PENDING
为什么要这样做
myObj: {
...action.existing
}
myObj = action.existing
如果要替换完整对象,则可以这样做。
export default function myReducer(state = initialState, action) {
switch (action.type) {
case PENDING:
return {
...state,
myObj: {
...state.myObj
}
}
case CASE_A:
return {
...state,
myObj: {
...state.myObj,
keyA: action.dataA
}
}
case CASE_B:
return {
...state,
myObj: {
...state.myObj,
keyB: action.dataB
}
}
}
};
推荐阅读
- radeditor - Sitefinity 向页面文本编辑器添加新功能
- sql - Postgres 中的级联删除:从子表和父表中删除,并从子表中保存 ID
- java - Spring-boot-maven-plugin 未部署到两个工件存储库之一
- python - 如何在列名中使用“.1”规范化列名并且不删除任何其他字符?
- python - 用于时间序列的 Keras 有状态 LSTM
- android - 如何在android中删除webview的标题边框
- python - odoo 更改值项目 many2one
- rxjs - 使用 RXJS 进行 Angular 5 $http 轮询
- angular - 类型 'undefined[]' 不可分配给类型 'number'
- kubernetes - 达到内存限制后崩溃时pod不会自动重新启动