为什么80%的码农都做不了架构师?>>>   

昨天做 task 的时候,遇到了一个问题。

TypeError: can't define property "x": "obj" is not extensible

而我的代码是

 public txTiles: Array<TransactionFilterTile>;constructor(private _store: Store<AppStore>){_store.select(str => str.transactionState.tiles).subscribe(tiles => {this.txTiles = tiles;// tiles是一个对象数组this.txTiles.forEach( (x) => {x.currentStyle = { 'border-color': `${x.htmlColor}` };// 给currentStyle属性再赋值});}
}

究其原因,项目中使用了 ngrx/store,它是 RXJS 的一种超牛叉的状态管理,由 Redux 支持。Redux 可以确保 state 变化的可预测性,主要的约束有:

  • state 以单一对象存储在 store 对象中;
  • state 只读
  • 使用纯函数 reducer 执行 state 更新

所以,服务器端的响应数据是只读的,且只能通过 dispatch(action)来触发更新,所以在 ts 文件里面不能随意给 tile 的属性重新赋值,可我又不想通过 dispatch 改变底层数据,那么该怎么办呢? 我们可以克隆获取的数据。修改后的代码为:

 _store.select(str => str.transactionState.tiles).subscribe(tiles => {this.txTiles = [];// 构建空数组if (tiles && tiles.length) {tiles.forEach(x => {self.txTiles.push(new TransactionFilterTile(x));});}this.txTiles.forEach( (x) => {x.currentStyle = { 'border-color': `${x.htmlColor}` };// 给currentStyle属性再赋值});
}

也就是构建空数组,然后把获取到的数据放到空数组中,这样既可以不更改底层数据,又可以在本组件中对从服务器获取到的数据进行修改。

转载于:https://my.oschina.net/hyzccc/blog/2086032

关于 @ngrx/Store 下 obj 的扩展问题相关推荐

  1. [QML][Json] QML下Json操作扩展(增删查改)

    QML下Json操作扩展(增删查改) 具体代码实现如下链接: https://github.com/Asa-gc/SUTL/blob/main/src/qml/func/MyJson/MyJson.j ...

  2. NgRx Store createSelector 返回的 selector 执行取数逻辑的单步调试

    测试源代码: import { Component } from '@angular/core'; import { createSelector } from '@ngrx/store';expor ...

  3. NgRx Store createSelector 的单步调试和源代码分析

    源代码: import { Component } from '@angular/core'; import { createSelector } from '@ngrx/store';export ...

  4. NgRx Store里的StoreModule.forRoot()

    NgRx Store is mainly for managing global state across an entire application. In cases where you need ...

  5. 从ngrx store里selector出来的Observable,执行subscribe的单步调试

    源代码: getNextPageContext(): Observable<PageContext> {const a = this.store.pipe(select(RoutingSe ...

  6. Windows 下开发PHP扩展资源

    1.Windows 下开发PHP扩展 http://www.shinrun.com/htmls/100101-37.html 2.windows下开发PHP扩展dll(无需Cygwin) http:/ ...

  7. [bash] 打包某目录(可以是绝对路径)下的指定扩展名的文件

    #!/bin/bash # 该脚本用于打包某目录(可以是绝对路径)下的指定扩展名的文件 if [ $# -lt 1 ] || [ "$1" = "." ] || ...

  8. springBoot JPA 数据库字段(实体类)带下划线在扩展findBy方法时出错的解决办法

    springBoot JPA 数据库字段(实体类)带下划线在扩展findBy方法时出错的解决办法 参考文章: (1)springBoot JPA 数据库字段(实体类)带下划线在扩展findBy方法时出 ...

  9. C++查找一个目录下所有特定扩展名的文件

    记录一个小技巧,查找一个目录下所有特定扩展名的的文件名.代码所示是查找所有后缀为".txt"的文件名,并将结果存储于名为statfileurllist的vector中 注:也可以查 ...

最新文章

  1. odbc里面没有Microsoft Access Driver(*.mdb)问题解决
  2. php 不刷新提交,提交表单而不刷新页面ajax,php,javascript?
  3. leetcode 1074. 元素和为目标值的子矩阵数量(map+前缀和)
  4. leetcode刷题:不同路径II
  5. 【课程作业】EA-CNN演化卷积神经网络实验记录
  6. 全国草地资源类型分布图
  7. VS2010安装教程
  8. ORL数据集百度网盘
  9. PyKeyBoardFairy可以替代你游戏中的卡键盘和鼠标宏
  10. 横向合计代码 锐浪报表_[原创]锐浪报表动态加入列和最后加入合计列+进度条显示...
  11. vscode 快速生成vue模板
  12. 深入浅出ES6的标准内置对象Proxy
  13. 赵小楼《天道》《遥远的救世主》深度解析(82)有信无证是谓魔,有信有证是谓佛。无无明,无忧恐惧,尘归尘土归土,一往无前,无可阻挡。
  14. 智能识别车道线、车辆、行人、停车标志
  15. java输入输出流数组_详解Java中ByteArray字节数组的输入输出流的用法
  16. 2017,那些引发关注的新建展馆
  17. CleanMyMac X清理苹果mac特殊的软件授权权限问题如何解决
  18. 魅力主播曹启泰《上班这点事》经典语录
  19. 基于JAVA江西婺源旅游文化推广系统计算机毕业设计源码+数据库+lw文档+系统+部署
  20. Shell之awk命令

热门文章

  1. STM32F103--(二) GPIO实践
  2. 【Windows】字符串处理
  3. FreeBSD NTP 简单使用
  4. 网络通信模型(IO模型)
  5. Linux中防火墙(二)
  6. 字符串(一):char 数组
  7. CCF NOI1063 计算组合数
  8. Python语言精要---上
  9. mac mini 安装mysql数据库
  10. Tengine 安装和基本使用