NgRx 中的 Reducer 在连续调度第二个动作后采用旧状态
Reducer in NgRx takes old state after dispatching second action in a row
每个员工都有很多技能,可以用employee.skills访问,我做了添加、删除和更新它们的逻辑。
除这种情况外,一切正常:
例如,假设我添加了一项技能。好的技能被添加,组件重新渲染并且技能显示在列表中。之后我更新了一些其他技能。此其他技能得到更新,但先前添加的技能从列表中删除。在 Redux DevTools 扩展中,我看到更新技能操作采用旧状态(新添加技能之前的状态)并且只是更新了另一个技能。 但是在我刷新页面后,一切似乎都正常:新技能出现了,另一个技能也更新了。
无论以哪个顺序调度哪个动作,都会发生这种情况。
第一步:
Add skill
第二个动作:Update some other skill
员工模型:
export class Employee {
id?: number;
firstName: string;
lastName: string;
skills?: Skill[];
}
问题似乎出在 UPDATE_SKILL_SUCCESS
reducer 函数中。
ADD_SKILL_SUCCESS
函数正在将新技能添加到 skill
属性 中 EmployeeState
。您没有将它添加到 Employee
对象中的 skill
。
现在,在更新技能时,您正在从 Employee
模型的 skills
属性 中获取 newState
(没有新添加的技能)。
所以为了让它为你工作,你需要稍微调整你的 UPDATE_SKILL_SUCCESS
reducer 函数。
将第一行替换为
let newState = state['skills'];
它应该适合你。
每个员工都有很多技能,可以用employee.skills访问,我做了添加、删除和更新它们的逻辑。
除这种情况外,一切正常: 例如,假设我添加了一项技能。好的技能被添加,组件重新渲染并且技能显示在列表中。之后我更新了一些其他技能。此其他技能得到更新,但先前添加的技能从列表中删除。在 Redux DevTools 扩展中,我看到更新技能操作采用旧状态(新添加技能之前的状态)并且只是更新了另一个技能。 但是在我刷新页面后,一切似乎都正常:新技能出现了,另一个技能也更新了。 无论以哪个顺序调度哪个动作,都会发生这种情况。
第一步: Add skill
第二个动作:Update some other skill
员工模型:
export class Employee {
id?: number;
firstName: string;
lastName: string;
skills?: Skill[];
}
问题似乎出在 UPDATE_SKILL_SUCCESS
reducer 函数中。
ADD_SKILL_SUCCESS
函数正在将新技能添加到 skill
属性 中 EmployeeState
。您没有将它添加到 Employee
对象中的 skill
。
现在,在更新技能时,您正在从 Employee
模型的 skills
属性 中获取 newState
(没有新添加的技能)。
所以为了让它为你工作,你需要稍微调整你的 UPDATE_SKILL_SUCCESS
reducer 函数。
将第一行替换为
let newState = state['skills'];
它应该适合你。