我正在使用reactjs和mobx . 我有一个可观察的Item对象数组,我试图通过观察数组中对象的属性来显示它们并“显示”属性更改 . 更改不是由任何组件上的单击事件触发,而是由对API调用的响应触发 .

我理解数组中对象的属性更改不会触发整个列表重新呈现(这很好),但我不能让它重新呈现应该观察Item的属性的单个Item组件宾语 .

我已经尝试了几种方法来获取数组中的Item对象是可观察的,但这些方法都不适用于我:

调用'extendObservable() from the Item'的构造函数

将props.item分配给用'@observable'装饰的类成员

调用observable构造函数并传入item对象,如下所示:const item = observable(item)

将'hasUnreadData'字段作为单独的prop传递,并通过'observable.box(item.hasUnreadData)使其可观察 .

这是一些简化的示例代码(在typescript中):

class Item {

id : string

hasUnreadData : boolean

constructor (data: any) {

this.id = data.id;

// false by default

this.hasUnreadData = data.hasUnreadData;

}

}

@observable items: Item[];

// observes the array and re-renders when items are added/removed (this works)

@observer

class ItemListComponent extends React.Component {

render() {

return (

{

items.map((item: Item, index) => {

}

}

)

}

}

// should observe the 'hasUnreadData' flag and apply different styles when it re-renders (but this does not work, it only displays the initial state)

@observer

class ItemComponent extends React.Component {

render() {

const item = this.props.item;

return (

)

}

}

// imagine this is a promise from an API call

API.fetchData().then((itemId: string) => {

itemToUpdate = items.find(i => i.id === itemId);

itemToUpdate.hasUnreadData = true;

// this does not trigger the ItemComponent to render again as expected.

});

我是否需要克隆或“重新创建”Item对象以触发渲染?或者我在这里犯了一些明显的错误?任何帮助赞赏 .

应该如何理解mobx_如何使用mobx观察observable数组上的object.property更改相关推荐

  1. 彻底理解Toast原理和解决小米MIUI系统上没法弹Toast的问题

    彻底理解Toast原理和解决小米MIUI系统上没法弹Toast的问题 参考文章: (1)彻底理解Toast原理和解决小米MIUI系统上没法弹Toast的问题 (2)https://www.cnblog ...

  2. 深入理解C指针之四:指针和数组

    深入理解C指针之四:指针和数组 原文:深入理解C指针之四:指针和数组 数组是C内建的基本数据结构,数组表示法和指针表示法紧密关联.一种常见的错误认识是数组和指针完全可以互换,尽管数组名字有时可以当做指 ...

  3. #如何理解使用for循环遍历lst与lst[:],如果使用remove更改列表结果会不同

    # 如何理解使用for循环遍历lst与lst[:],如果使用remove更改列表结果会不同 ''' # 基础知识 一.lst与lst[:]的区别 lst[:]创建原始列表lst的副本.他们各自的改变不 ...

  4. 《深入理解 Java 内存模型》读书笔记(上)(干货,万字长文)

    目录 0. 前提 1. 基础 1.1 并发编程的模型分类 1.1.1 通信 1.1.2 同步 1.2 JAVA 内存模型的抽象 2. 重排序 2.1 处理器重排序 2.2 内存屏障指令 2.3 HAP ...

  5. mobx中的数组需要注意的地方

    mobx中如果将数组作为可观察. 可以通过添加修饰符observable或者调用observable方法. 很多的时候, 我们将此修饰为可观察的对象后, 就随处可用了. 比如,采用 map  forE ...

  6. 理解PBR:从原理到实现(上)

    PBR 从离线渲染进入游戏引擎 CSDN 博客的公式排版有问题,可以看我的 GitHub Page:https://neil3d.github.io/unreal/pbr-theory.html 基于 ...

  7. 最容易理解的计算机网络的基础知识概论(上)

    最容易理解的计算机网络基础知识概论(上) 1.计算机网络的分类方法 1)广域网. 2)城域网. 3)局域网. 4)个人区域网和人体区域网. 2.计算机的组成及结构 2.1早期计算机网络组成与结构 3 ...

  8. 为什么Vue不能观察到数组length的变化?

    官网解释如下 由于 JavaScript 的限制,Vue 不能检测以下变动的数组: 当你利用索引直接设置一个项时,例如:vm.items[indexOfItem] = newValue 当你修改数组的 ...

  9. 翻译:理解TCP/IP网络栈编写网络应用(上)

    1.摘要 之前在网上看到了这篇描述tcp网络栈原理的文章,感觉不错,决定抽空把这篇文章翻译一下.一来重新温习一下TCP相关知识,二来练练英文.由于原文太长,这里把文章分成上下两部分,分别对应了原理和代 ...

最新文章

  1. 6000字详解数据仓库建设
  2. python生成随机数—random模块
  3. 初始化java工具失败,spring初始化失败解决办法
  4. 【SQL-分组合并字符串】把相同分组的某个字段合并为同一个字符串(使用函数)...
  5. dotnet core webapi +vue 搭建前后端完全分离web架构(一)
  6. 安卓源码 代号,标签和内部版本号
  7. python获取当前脚本所在路径并在此基础上创建新的文件路径
  8. mysql数据库诊断_MySQL数据库诊断——InnoDB关机问题 【转】
  9. emmet 工具的基本使用,总结
  10. 数据预处理与特征工程—11.分层采样
  11. android-Handler
  12. linux eclipse qt5 ui_helloworld.h,转载Eclipse+qt的开发环境
  13. 多块盘制作成一个lvm
  14. Axure9桌面无法显示图标
  15. oracle循环视频教程,玩转Oracle入门知识和实战教程---韩顺平主讲(全31集)
  16. SPSS基础教程:SPSS菜单命令详解(三)
  17. Windows 95, 98, Me 的界面对比(图集)(原文于2016-03-26发布于贴吧)
  18. 记一篇IT培训日记005-Hello Java
  19. 蓝桥杯-决赛B组第七届java
  20. 简单的python爬虫--爬取Taobao淘女郎信息

热门文章

  1. Mikogo新版本已支持Linux系统
  2. Android UI控件之Gallery(拖动效果) --拖动式图片浏览
  3. 存量电力系统_RCR新文:中国电力基础设施发展的物质存量和流量
  4. java 为何 无效_java – 为什么compareTo无效导致Collections.sor...
  5. linux timerfd_settime函数,Linux的timerfd分析
  6. vhdl变量赋初值_变量类型、构造器、封装以及 LeetCode 每日一题
  7. ios uiwindow弹窗_iOS-UIWindow详解
  8. 剑指offer面试题[57]-删除链表中重复的结点
  9. python21天打卡Day12--for循环,列表推导式-构建列表
  10. c语言中分号存在的意义,问什么C程序里总是提示缺少分号;,而明明有分号?