You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mobx可观察数组未更新求助:移除元素后React组件不刷新

问题分析与解决方案

看起来问题出在你给findUserPresentations方法标记了@action装饰器——这个方法只是用来查询读取数据,而非修改状态,@action会干扰Mobx的依赖追踪逻辑,导致你的observer组件无法感知到数组的变化。

具体修复步骤:

  1. 移除findUserPresentations上的@action装饰器
    把Store里的这个方法改成普通方法即可:
    findUserPresentations(userId) {
      return this.list.filter(item => userId === item.userId);
    }
    

为什么这样能解决问题?

Mobx的@action是专门用来包裹修改状态的逻辑的,它的核心作用是批量处理状态变更,避免不必要的重复渲染。但在action内部读取observable数据时,Mobx不会自动把这些读取操作记录为组件的依赖——这就导致你的容器组件虽然用了@observer,但它无法追踪到this.list的变化,自然不会重新渲染。

当你去掉@action后,findUserPresentations里的this.list.filter操作就会被Mobx正确追踪,一旦this.list的元素被移除,组件的get presentations()就会重新计算,触发组件更新。

额外验证点:

  • 确认你的MyPresentations组件正确使用了传入的presentations props(比如在render里遍历它),确保props变化能触发子组件的渲染。
  • 你的remove方法逻辑是没问题的:Mobx observable数组的remove方法会正确触发状态变更通知,console.log的输出也证明了这一点。

内容的提问来源于stack exchange,提问作者s-leg3ndz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:57:23