【问题标题】:React native- Best way to create singleton patternReact native - 创建单例模式的最佳方式
【发布时间】:2017-10-16 20:36:31
【问题描述】:

我是 react-native 编码的新手,但在 Objective-c 和 swift 编码方面有经验,并希望在 react-native 中使用单例模式。 我试图从其他 StackOverflow 答案中找出解决方案,但其中大多数只创建单例函数,如下代码:

var Singleton = (function () {
    var instance;

    function createInstance() {
        var object = new Object("I am the instance");
        return object;
    }

    return {
        getInstance: function () {
            if (!instance) {
                instance = createInstance();
            }
            return instance;
        }
    };
})();

function run() {

    var instance1 = Singleton.getInstance();
    var instance2 = Singleton.getInstance();

    alert("Same instance? " + (instance1 === instance2));  
}

正如我们在上面的代码中看到的,我们创建的是单例函数而不是类。 如果有任何方法可以创建单例类并将该类中的多个变量作为objective-c 或swift 传递,请告诉我。 注意:如果我走错了方向,也请通知我。

【问题讨论】:

    标签: reactjs react-native singleton


    【解决方案1】:

    这是我对单例类的实现...

    Controller.js

    export default class Controller {
        static instance = Controller.instance || new Controller()
    
        helloWorld() {
            console.log("Hello World... \(^_^)/ !!")
        }
    }
    

    用法:

    import Controller from 'Controller.js'
    
    Controller.instance.helloWorld()
    

    【讨论】:

    • 不应该是static sharedInstance = Controller.sharedInstance == null ? new Controller() : Controller.sharedInstance,因为static
    【解决方案2】:

    你可以使用类似的东西

     class SingletonClass {
    
      static instance = null;
      static createInstance() {
          var object = new SingletonClass();
          return object;
      }
    
      static getInstance () {
          if (!SingletonClass.instance) {
              SingletonClass.instance = SingletonClass.createInstance();
          }
          return SingletonClass.instance;
      }
    }
    
    var instance1 = SingletonClass.getInstance();
    var instance2 = SingletonClass.getInstance();
    

    【讨论】:

    • 如何从不同的组件访问同一个实例?
    • 可以在单例类的最后写下这段代码: const singletonClass = SingletonClass.getInstance();导出默认singletonClass 然后将文件与任何其他组件一起导入
    【解决方案3】:

    单例模式在 JS 生态系统中使用不多。您应该查看的是http://mobx.js.org。 MobX 是一个库,允许您创建可观察对象来存储应用程序的数据。您为每个您喜欢的域实例化一个商店,并对该商店进行编辑以更改应用状态。

    【讨论】:

      猜你喜欢
      • 2020-10-30
      • 2010-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-28
      • 1970-01-01
      • 1970-01-01
      • 2018-04-14
      相关资源
      最近更新 更多