Reactjs 无法在严格模式下更新mobx存储中的空数组
当我尝试更新mobx store中的可观察数组时,即使我将突变包装在动作下,我也会得到下面的错误。(runInAction()方法)。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版本(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
}