2016-07-15 8 views
0

私は、セッション変数がtrueまたはfalseであるかどうかに基づいて、アクティブなボタンと非アクティブなボタンを切り替えようとしています。Session変数がReactで変更されたときに私の引数がトリガーしない理由を理解できたら助けてくれますか?

は、子コンポーネントで、Iは、セッション変数を宣言:

choice(e){ 
    e.preventDefault(); 
    ... 
    Session.set("upNext", true); 
    ... 

    }; 

そして、親コンポーネントで、Iは、レンダリング(){}関数は、このコードを配置:

最後
render(){ 

let upNext; 
if(Session.get("upNext")){ 
upNext = <button className="ui right huge labeled icon primary button" onClick={this.nextPosition.bind(this)}><i className="right arrow icon"></i>Next</button> 
} else{ 
upNext = <button className="ui right huge labeled icon primary button disabled" onClick={this.nextPosition.bind(this)}><i className="right arrow icon"></i>Next</button> 
} 

    return(
    <div className="ui container"> 
     {upNext} 
    </div> 
    } 

componentWillMount()メソッドでは、セッション変数をfalseに設定して、次のコンポーネントが読み込まれる前にリセットします。

セッション変数は、falseからtrueに変更されますが、最初の条件文(Session.getがtrueの場合)内のコードは決して実行されません。 Blazeを使って作業しているときに、この問題が起きたことはありませんでした。

答えて

0

私はちょうど良い古いjavascriptでこの問題を解決することを決め、セッション変数に依存するのではなくボタンをクリックした後にclassName属性を操作しました。

まだ、セッションがReactで奇妙な振る舞いをしているのは奇妙です。

+0

あなたのコンポーネントの小道具、それゆえレンダリング関数が再び呼び出される原因になります。 – rdk1992

+0

'createContainer'コンポーネントでSession変数の代わりにReactiveVarを使用しました。 –

0

あなたはcreateContainer以内に反応する必要があなたのコードの一部を追加することができます - あなたは、あなたのコンポーネントコンテナ内の反応変数にセッション値を設定していたかもしれないので、それが変更されたとき、それは変更をトリガーhttps://guide.meteor.com/react.html#using-createContainer

+0

'createContainer'コンポーネントでSession変数の代わりにReactiveVarを使用しました。セッション変数は私が何をしても動作しません。 –

関連する問題