2016-07-07 8 views
1
componentDidMount : function() 
{ 
    console.log(this);//1 
    console.log(this.state);//2 
} 

1行はすべての詳細を示し、すべての状態変数を取り除きますが、2行目は空のオブジェクトを示します。どうして?どのように私は状態変数や他の関数にアクセスするのですか?"this" avaialableしかしthis.stateは利用できません

+0

コンポーネントをどの状態でも初期化していない場合。 'this.state'は空のオブジェクトであると予想されます。 – xiaofan2406

+0

ブラウザのコンソールは怠惰なので、オブジェクト参照をあなたの要求に遅れて逆参照します。 'this'リファレンスの実際の内容を確認するには、デバッガを使用し、エンジンが壊れている間にチェックします。 – zerkms

+0

@ xiaofan2406:私はクラスで定義された関数を意味しました。 – Mihika

答えて

1

これは、使用する前に状態を定義する必要があるためです。 ES6クラスと一般的な方法は、コンストラクタ内からそのように初期状態を定義することです:

class MyCmp extends React.Component { 
    constructor() { 
     super(); // don't forget to call superclass constructor 
     this.state = {foo: 1}; 
    } 

    componentDidMount() { 
     console.log(this);//1 
     console.log(this.state);//2 
    } 
} 

、あなたの中にプロファイルとしてステージ0または他のいくつかのステージ番号を持っている場合は、提案グレードのJavaScript(例えばを使用している場合バベル構成)、そしてあなたも、クラスのプロパティとして定義することができます。私は助けたことを願っています

var MyCmp = React.createClass({ 
    getInitialState: function() { 
     return { 
      foo: 1 
     } 
    }, 
    componentDidMount : function() { 
     console.log(this);//1 
     console.log(this.state);//2 
    } 
} 

:あなたはES6クラスを使用しない場合

class MyCmp extends React.Component { 
    state = { 
     foo: 1 
    }; 

    componentDidMount : function() { 
     console.log(this);//1 
     console.log(this.state);//2 
    } 
} 

は、あなたのような何かをするだろう。反応をお楽しみください!

+2

ES6を使用していないのであれば、コンポーネントのgetInitialStateプロパティを設定します:https://facebook.github.io/react/docs/component-specs.html – Fizz

+0

本当に、私はそれを直ちにキャッチしませんでした。ありがとう@フィズ、私は私の答えを更新しました。 – Grgur

+0

私は0.13バージョンを使用しています。ES6ではありません。n getInitialStateを使用してすべてのコンポーネントを更新しました。 – Mihika

関連する問題