reactjs - React-Redux:清理状态
问题描述
在我的应用程序中,我做了两个相关的获取。From the first get I get all the ids, when one of these ids is chosen, it is used to make a new api call that gives me back some data.
所以在第一次得到之后,我遇到了这样的情况:
docent: (2) [{…}, {…}]
0: {id: "12", name: "Name1", surname: "Surname1"}
1: {id: "13", name: "Name2", surname: "Surname2"}
length: 2__proto__: Array(0)
agenda: []
在用户选择其中一个 id 后,议程数组也会填充根据该 id 检索到的信息,例如:
agenda: (2) [{…}, {…}]
0: {id: "1", docent_id: "12", date: "2020-05-27", start_at: "09:00:00", end_at: "10:00:00"}
1: {id: "2", docent_id: "12", date: "2020-05-27", start_at: "10:00:00", end_at: "11:00:00"}
length: 2
我的问题是:如果用户再次更改docent数组的 id,议程数组变为:
agenda: (3) [{…}, {…}, {…}]
0: {id: "1", docent_id: "12", date: "2020-05-27", start_at: "09:00:00", end_at: "10:00:00"}
1: {id: "2", docent_id: "12", date: "2020-05-27", start_at: "10:00:00", end_at: "11:00:00"}
2: {id: "3", docent_id: "13", date: "2020-05-28", start_at: "09:00:00", end_at: "10:00:00"}
length: 3
所以我有过去的信息和新的信息。
我希望能够删除保存在议程中的信息,以防用户更改讲解员的 ID。我能怎么做?
行动:
export const agendaList = (id, agenda) => {
return (dispatch) => {
fetch(api + id, {
headers: {
Accept: "application/json",
},
})
.then((result) => result.json())
.then((agenda) => {
dispatch({
type: "AGENDA_LIST",
agenda: agenda
});
})
.catch((error) => console.log("An error occurred.", error));
};
减速机:
const initialState = {
agenda: []
}
export const reducer = (state = initialState , action) => {
case 'AGENDA_LIST':
return {...state, agenda: [...state.agenda, ...action.agenda]};
default:
return state;
}
解决方案
您的 reducer 正在合并当前状态和操作数据:
return {...state, agenda: [...state.agenda, ...action.agenda]};
您想替换当前的状态议程:
return {
...state,
agenda: action.agenda
};
推荐阅读
- python - 尝试根据用户输入从列表列表中返回相关信息
- python - 字典熊猫中的展平列表
- java - 从异常处理程序获取元素未找到异常
- mysql - 如何从 SQL Server 生成 XML 日志文件
- python - pip 包在 OSX 中创建可执行文件,但在 Ubuntu 中没有
- python - 根据条件加入有或没有最后一个元素的列表的pythonic方法
- java - 设置kafka主题过滤器
- html - 如何使用 li 和 ul 标签从 Selenium 的下拉列表中选择值?
- signal-processing - WebAudio API / javascript中低频信号的快速傅立叶变换
- spring - Spring Security @PreAuthorize 在将验证器 bean 添加到 WebDataBinder 时将其设置为 null