2017-06-05 5 views
0

以下の反応コンポーネントがあると、複数のコンポーネントから次のコンポーネントをインポートできます。なぜ私は各モジュールにインポートして、インクリメントを呼び出すと、同じインスタンスであるかのように値をインクリメントします。私はいくつかの点検をしたので、それが「窓」に付いているとは思わない。インスタンス化されたクラスをインポートすると、グローバルプロトタイプが設定されます

グローバルプロトタイプが設定されている可能性がありますか?それでも、なぜインスタンス化された同じクラスを一見して更新しているのか説明できません。

import React, { Component } from 'react'; 

class FeatureFlags extends Component { 
    constructor (props) { 
    super (props); 
    this.featureFlagList = [ 'test': true ]; 
    this.i = 0; 
    } 

    get showFeatureFlagList() { 
    return this.featureFlagList; 
    } 

    increment() { 
    this.i++; 
    return this.i; 
    } 

    setList (list) { 
    this.featureFlagList = list; 
    return this.featureFlagList; 
    } 

    render() { 
    return (
     <div></div> 
    ); 
    } 
} 

export default new FeatureFlags; 

//First component - 
import FeatureFlags from './FeatureFlags'; 
console.log('first module ', FeatureFlags.increment()); //Logs 1 

//Second component 
import FeatureFlags from './FeatureFlags'; 
console.log('second module ', FeatureFlags.increment()); //Logs 2 
+0

私はここにひどくナイーブかもしれませんが、私ドン輸出以外の 'new'キーワードを見ないと、私はそれが同じインスタンスだと言う傾向があります。 – Hodrobond

答えて

1

いいえ、それは1つのインスタンスだから、あなた

export default new FeatureFlags; 

です!モジュールを複数回インポートすると、常に同じ値がインポートされます。

export default class FeatureFlags extends Component { … } 

と、多くの場合、あなたがそれを必要ととして他のモジュールでそれをインスタンス化します:

代わりに、あなたは常にクラスをエクスポートする必要があり

import FeatureFlags from './FeatureFlags'; 
const myLocalFlags = new FeatureFlags; 
console.log('first module ', myLocalFlags.increment()); //Logs 1 
+0

'モジュールを複数回インポートすると、常に同じ値がインポートされます。'心が吹かれました。エクスポートクラスの構文を使用した場合、newを呼び出して新しいインスタンスをインスタンス化する必要がありますか? – seasick

+0

これは私が(1つのインスタンスとして共有する)後の動作です。なぜ私はそれが働いたのか知​​る必要がありました。どうすれば既存のコードを保持してこのコンポーネントをレンダリングできますか? は、反応エラーをスローします。新しいものを削除するとこの問題は修正されますが、元の意図を1つのインスタンスとして共有するという意図は失われます。 – seasick

+0

Reactは、そのコンポーネントがクラスであることを必要とするので、必要に応じてインスタンス化できます。グローバルな状態ストアを明示的に作成して、そのコンポーネントのすべての用途に渡す必要があると思います。 – Bergi

関連する問題