Angular使用BehaviourSubject状态管理时如何去除observable中的undefined值
你出现这个问题的核心原因是状态初始化不完整:
你在BehaviourSubject类中仅声明了todos的类型为User[],但没有给它设置初始值为空数组,当你初始化Store传入new BehaviourState()时,state里的todos属性默认值是undefined,而非预期的空数组,第一次新增todo时拼接数组就会出现异常,最终产生多余的undefined值。
第一步:修正状态初始值
修改behaviourState.ts中的BehaviourState类,给todos设置默认空数组即可解决绝大多数情况:
export class BehaviourState { todos: User[] = []; // 新增初始值赋值 }
第二步:(可选)增加数组容错逻辑兜底
如果担心后续操作中仍可能存在无效值推入todos,可以在reducer更新状态时增加过滤逻辑,自动移除数组中的undefined、null等无效值:
修改behaviourReducer.ts中的ADD_TODO分支逻辑:
case fromActions.ADD_TODO: this.setState({ ...this.state, // 用||[]兜底避免todos为undefined的情况,再用filter过滤无效值 todos: [action.payload.todo, ...(this.state.todos || [])].filter(Boolean) }); break;
内容的提问来源于stack exchange,提问作者vishnu
相关产品推荐
相关产品推荐

