2017-02-21 10 views
3

内部アクセスコンポーネントの状態を私はどこでも問題は、私ができることですA.シーンを変更するA.changeScene(sceneVal) を使用してから変更シーンを呼びたいこのはネイティブリアクト:静的関数

export class A extends Component{ 
    constructor(props){ 
    this.state = { 
     scene:0 
    } 
    } 
    static changeScene(scene){ 
    this.setState({scene:scene}) 
    } 
} 

のように定義されたコンポーネントを持っていますアクセスできません.setStateこのエラーが発生しましたUnhandled JS Exception: this.setState is not a function.

Aコンポーネントが既にマウントされていると確信しています。私は、コンストラクタでグローバル変数var self = null;を定義することによって、およびコンストラクタself = this内でこのエラーを回避することができますが、私は

+0

あなたはコンポーネント 'A'の唯一の単一のインスタンスがあることを、確認することができますか?もしそうなら、 'this'を静的変数に代入するのは合理的です。そうでない場合は、質問を再考する必要があります。 –

+0

静的関数がコンテキストを保持するために 'bind'を必要とするかどうかわかりません。あなたはそれを試すことができます – jose920405

+0

静的関数はあなたの非静的関数にアクセスできる 'this'にアクセスすることは決してありません。それぞれのインスタンスが持っているように、非静的メソッドについて考えて、静的メソッドについて考えてください。 –

答えて

1

理由は、あなたがstatic functionを使用している場合、その後static方法がすることはできません、である。この問題をrosolveするためのより良い方法をしたいですその機能の中でthisにアクセスしてください。 static機能を使用しないでください。 Staticメソッドは、thisを使用してclassのインスタンスで定義された値、プロパティ、およびメソッドにアクセスできません。

は、この記事をチェックしてください:http://odetocode.com/blogs/scott/archive/2015/02/02/static-members-in-es6.aspx

+0

は、グローバルなvar自己=これは悪い考えを定義していますか? Aのインスタンスは1つしか存在しません。ありがとう:) – Coyote

+1

あなたはグローバル変数を使用することができますが、私はあなたが簡単にこの種のタスクを行うことができますredux/fluxのようないくつかのアーキテクチャを使用する方が良いと思います。あなたはAの何かを変更したいすべてのコンポーネントから、Aの変更を聞いて保存する値を渡すことができますそれはより適切な方法になります:) –

関連する問題