【问题标题】:MobX adding objects to an observable arrayMobX 将对象添加到可观察数组
【发布时间】:2026-02-22 13:55:02
【问题描述】:

MobX 对象到可观察数组

我无法将一个对象推入一个可观察数组并让它成为我可以迭代的东西。

起点(所有数据都通过控制台的日志):

if (!self.selectedGlobalFilters) self.selectedGlobalFilters = observable([])

并接受一个对象 filter.options01 作为:

Proxy {Symbol(mobx administration): ObservableObjectAdministration$$1}
  [[Handler]]: Object
    [[Target]]: Object
      key: "status"
      value: "rejected"

...然后尝试推送

self.selectedGlobalFilters.push(filter.options01)

给我:

[Proxy]
  0: Proxy
    [[Handler]]: Object
      [[Target]]: Object
        key: "status"
        value: "rejected"

然后尝试将另一个对象 filter.options02 推送为:

Proxy {Symbol(mobx administration): ObservableObjectAdministration$$1}
  [[Handler]]: Object
    [[Target]]: Object
      key: "status"
      value: "done"


self.selectedGlobalFilters.push(filter.options02)

给我:

[Proxy]
  0: Proxy
    [[Handler]]: Object
      [[Target]]: Object
        key: "status"
        value: "done"

所以这里基本上有 2 个问题,一个是第二次推送会覆盖第一次,但更多——所以我希望这样的数据:

[{…}]
  0: 
    status: "rejected"
  1:
    status: "done"

TLDR; 我将如何实现这一目标? 以一种可以迭代的方式将一个对象推入一个可观察的数组中......

对数组进行切片对输出没有不同的影响。

一如既往地感谢所有方向,所以提前致谢!

【问题讨论】:

    标签: javascript arrays mobx mobx-state-tree


    【解决方案1】:

    我相信这里的问题是你只是观察一个变量而不是映射整个数组!

    @observable selectedGlobalFilters = [];
    
    if (!this.selectedGlobalFilters.length) 
      this.selectedGlobalFilters.push(filter.options01)
    

    ..或

    const gFilter = toJS(this.selectedGlobalFilters)
      this.selectedGlobalFilters = gFilter.push(filter.options01)
    

    ..如果症状持续存在:-)

    【讨论】: