Reactjs 无法在严格模式下更新mobx存储中的空数组

Reactjs 无法在严格模式下更新mobx存储中的空数组,reactjs,mobx-react,Reactjs,Mobx React,当我尝试更新mobx store中的可观察数组时,即使我将突变包装在动作下,我也会得到下面的错误。(runInAction()方法)。 Mobx版本(5.5.14)和Mobx反应(6.2.2) 这就是调用操作的仪表板代码的外观 - Dashboard.jsx. loadExpenseMetrics(inputDetails) .then(result=>{ const totalExpenses = calculateTotalExpense(resul

当我尝试更新mobx store中的可观察数组时,即使我将突变包装在动作下,我也会得到下面的错误。(runInAction()方法)。
Mobx版本(5.5.14)和Mobx反应(6.2.2)

这就是调用操作的仪表板代码的外观

- Dashboard.jsx.
loadExpenseMetrics(inputDetails)
       .then(result=>{
          const totalExpenses =  calculateTotalExpense(result.chartData)
          
          const updateMetrics = {
             totalExpenses:totalExpenses,
             expenseChartLabels:result.labels, // ["Travel","Office", "Food"]
             expenseChartData:result.chartData // [30000, 560000,89000]
          }
          this.props.bizStore.handleExpenseMetrics(updateMetrics)
        })
这就是可观测阵列的初始化方式

//businessStore.
      @observable expenseChartLabels =  []
      @observable expenseChartData = []
      @observable dashboardLoaded = false

      @observable dashboardMetrics = {
         totalRevenue: 0,
         totalExpenses: 0,
         totalCostSales: 0,
         saleOrderRevenue: 0,
         saleOrderCosts: 0,
         metricPeriod: 'Today'
      }
      
      handleExpenseMetrics(metricObj){
          runInAction(()=>{
             this.dashboardMetrics.totalExpenses = metricObj.totalExpenses
          })
       
          runInAction(()=>{
             this.expenseChartLabels = metricObj.expenseChartLabels
          }) //facing th error here... help with fix for it without removing the strict mode,

          runInAction(()=>{
             this.expenseChartData = metricObj.expenseChartData
          })
      }
出人意料地
这个问题只出现在可观察数组中,而不出现在普通字符串和数字中。实际上,下面的代码工作得非常好,但它涉及到多个修改的状态值

@action handleDashboardMetrics(metricsObj){

      runInAction(()=>{
         let dashMetrics = this.dashboardMetrics;
         dashMetrics.totalRevenue = metricsObj.totalRevenue
         dashMetrics.totalCostSales = metricsObj.totalCostSales
         dashMetrics.metricPeriod  = metricsObj.metricPeriod  
      })
   }

嗯,那太奇怪了。从您的代码判断,一切都应该正常工作,我实际上尝试在沙盒中复制它,但无法(查看控制台,那里没有错误)

你可以检查一下MobX版本,你使用的是最新版本吗?也许这是旧版本中的一个bug

此外,这里实际上不需要使用
runInAction
,因为您可以像这样将函数包装在
@action
装饰器中:

      @action
      handleExpenseMetrics(metricObj){
          this.dashboardMetrics.totalExpenses = metricObj.totalExpenses
          this.expenseChartLabels = metricObj.expenseChartLabels
          this.expenseChartData = metricObj.expenseChartData
      }

然后,函数体中的所有同步代码都将在操作中运行。

我已经尝试了上述代码,但问题仍然存在。有趣的是,上述问题只在可观测阵列中出现。。但是,否则我可以在另一个动作中多次修改数字和字符串的状态,callI明天将查看您在code sandbox中编写的代码片段,因为这方面已经很晚了。实际上,您创建的codesandbox片段工作得非常好。。由于我在
electronjs
项目中使用mobx,我的环境应该是一个因素吗。也许让我尝试升级到您使用的
mobx版本-5.15.6
。@danilla,我已将mobx和mobx react库更新到最新版本,但问题仍然存在。您可以在electronjs应用程序中的codesandbox中尝试我的示例吗?
      @action
      handleExpenseMetrics(metricObj){
          this.dashboardMetrics.totalExpenses = metricObj.totalExpenses
          this.expenseChartLabels = metricObj.expenseChartLabels
          this.expenseChartData = metricObj.expenseChartData
      }