2017-12-05 20 views
1

シングルトンを作成する方法を説明する別のトピックが見つかりましたが、それらのどれも私のために働いていませんでした。これは私が私が反応ネイティブでシングルトンクラスを作成する

警告を受ける Credentials.getInstance()を呼び出すときに、このポスト

export default class Credentials { 

    static myInstance = null; 

    _userID = ""; 

    static getInstance() { 
     if (myInstance == null) { 
      myInstance = new Credentials(); 
     } 

     return myInstance; 
    } 

    getUserID() { 
     return this._userID; 
    } 

    setUserID(id) { 
     this._userID = id; 
    } 
} 

から取った例である

変数myInstanceのを見つけることができません

答えて

1

JSは、静的にコンパイルされたような暗黙のフィールドの参照を持っていません言語。あなたは明示的にクラスの変数をルックアップする必要があります。それは本当にシングルトンではありませんので、JSは、適切なクラスのカプセル化を持っていないため

class Credentials { 

    static myInstance = null; 

    static getInstance() { 
     if (Credentials.myInstance == null) { 
     Credentials.myInstance = new Credentials(); 
     } 

     return Credentials.myInstance; 
    } 
} 

は、このアプローチには注意してください。

あなたが直接、簡単にインスタンスを変更することができます:カプセル化された

Credentials.myInstance = 'something else'; 

適切なシングルトンは、閉鎖を経て実施されるべきである:

const Credentials = (() => { 
    let myInstance = null; 
    return class Credentials { 
    static getInstance() { 
     if (myInstance == null) { 
     myInstance = new Credentials(); 
     } 
     return myInstance; 
    } 
    } 
})() 
0

私が最もクリーンで簡単な解決策は「ES6だと思いますシングルトンパターン "(このパターンに正式な名前があるかどうかは不明)。

インスタンスをデフォルトとしてエクスポートし、インポートしたすべてのインスタンスが同じインスタンスを取得します。これはモジュールrequireがキャッシュされているという事実に依存します。

あなたのクラスを作成し、そのようなをエクスポートします:あなたはそれをインポートどこあなたが同じインスタンスを取得

class Credentials { 

    constructor() { 
     this._userID = ""; 
    } 

    get userID() { 
     return this._userID; 
    } 

    set userID(userID) { 
     this._userID = userID; 
    } 

} 

export default new Credentials(); 

を:

import credentials from './credentials'; 
0

これは、単一のトン・インスタンスのいずれかの種類のために十分でなければなりませんJSで。

ここで、これをインポートすると、同じインスタンスが使用されます。あなたは、クラス内の日付を追加し、これをインポートしたさまざまな場所でアクセスすることによって、クロスチェックすることができます。

import { SomeClass } from 'some-class' 

let singletonInstance; 

if (!singletonInstance) { 
    singletonInstance = new SomeClass(); 
    // singletonInstance.time = new Date(); 
} 

export default singletonInstance; 

その後

import singletonInstance from './above-code-file'

を使用して、それをインポートします
関連する問題