有多个 mobx 实例处于活动状态

Posted

技术标签:

【中文标题】有多个 mobx 实例处于活动状态【英文标题】:There are multiple mobx instances actives 【发布时间】:2018-08-31 22:52:50 【问题描述】:

自从 Mobx 3.6 上次更新到 Mobx 4 后,我的应用程序刚刚停止工作。我正在使用 react-native,我只是按照说明迁移到最新功能,但我的应用程序只是不断崩溃并显示以下错误:

[mobx] 。这可能会导致意外结果:有关详细信息,请参阅 https://github.com/mobxjs/mobx/issues/1082。

Click here to check the error image

Mobx 商店:

我刚刚创建了一个简单的可观察对象,代码如下:

import React,  Component  from "react";

import  observable  from "mobx";

const ProductsStore = observable.object(
  
    selectedProduct: null,
    products: [
      
        id: 1,
        name: "NVIDIA 1050TI",
        desc: "4GB OC",
        model: "ASUS",
        price: 1050,
        quantity: 1
      ,
      
        id: 2,
        name: "NVIDIA 1060TI",
        desc: "6GB OC",
        model: "EVGA",
        price: 1050,
        quantity: 1
      ,
      
        id: 3,
        name: "NVIDIA 1070TI",
        desc: "8GB OC",
        model: "MSI",
        price: 1050,
        quantity: 1
      ,
      
        id: 4,
        name: "NVIDIA 1080TI",
        desc: "11GB OC",
        model: "FOUNDERS EDITION",
        price: 1050,
        quantity: 1
      
    ]
  ,
   selectedProduct: observable, products: observable 
);

export  ProductsStore ;

但是,当我尝试导入此文件时,它会使应用程序崩溃并显示我之前提到的错误。

import  ProductsStore  from '@store'

我试过不使用别名,但它似乎不起作用。

【问题讨论】:

快速说明:我尝试添加为 peerDependencies 甚至是 devDependencies,而不是依赖项。然后,重新安装软件包,错误仍然存​​在。 这是一个项目设置问题,所以发布 mobx 代码无济于事。检查 mobx 是否仅在您的 node_modules tree -d | grep mobx 中出现一次以快速检查。如果它是唯一的,则您可能已将包含 mobx 的包链接到您的项目中。 【参考方案1】:

我在与@mweststrate 聊天时解决了这个问题,并发现在我的项目中,我使用的库依赖于旧版本的 mobx。

版本 > 3.6,只接受一个 mobx 实例。

react-native-router-flux 使用的是旧版本,这是导致此问题的原因。

解决方法是将resolutions 属性添加到package.json 文件并将mobxmobx-react 添加到此属性。

  "resolutions": 
    "mobx": "^4.1.0",
    "mobx-react": "^5.0.0"
  ,

resolutions 属性仅适用于yarn不适用于npm。此属性覆盖旧的引用依赖项。如有其他问题,请阅读文档。

Selective resolutions in yarn

Multiple MobX instances in your application #1082

【讨论】:

我的版本是 5.0.3,我的控制台时常出现错误。我认为这可能与我使用 Server-Side-Rendering(Next.js) 的事实有关。

以上是关于有多个 mobx 实例处于活动状态的主要内容,如果未能解决你的问题,请参考以下文章

仅在对象实例的生命周期内保持 Python 解释器处于活动状态

在 TableViewController 上添加图像直到搜索栏处于非活动状态

JNI 保持对对象的全局引用,并使用其他 JNI 方法访问它。在多个 JNI 调用中保持 C++ 对象处于活动状态

当应用程序处于非活动状态时可以接收 UIAccelerometer 更新吗?

在应用程序后台运行时保持 XMPPStream 处于活动状态

我们可以在同一个AZ中拥有两个AWS NAT实例