Angular中TypeScript泛型状态管理服务无法返回预期对象问题排查
问题原因及解决办法
核心问题:Wrap类未保存实例属性
你的Wrap类构造函数仅打印了参数,但没有将stateId和data赋值给实例的属性,导致创建的Wrap对象没有任何可访问的状态数据,所以console.log(res)时看不到预期的内容,看起来像空对象。
修复Wrap类:
export class Wrap { // 定义实例属性 public stateId: state1; public data?: any; constructor(stateId: state1, data?: any){ console.log("stateId", stateId, data) // 将参数赋值给实例属性 this.stateId = stateId; this.data = data; } }
额外注意点:状态更新的引用比较逻辑
changeState方法里的this.state === nextState是引用比较,因为每次new Wrap()都会生成新对象,所以这个判断当前不会阻止状态更新。但如果后续你想复用同一个Wrap对象实例,这个判断会生效。如果需要按值比较状态是否变化,得自定义比较逻辑,比如对比stateId和data的具体值。
验证效果
修改Wrap类后,在hello类的订阅中console.log(res)就能看到包含stateId和data属性的完整Wrap对象,初始状态和变更后的状态都能正常输出。
内容的提问来源于stack exchange,提问作者Namit
相关产品推荐
相关产品推荐

