2016-08-09 15 views
0

基本的には、私のページを反応させ、ユーザーの入力/選択に基づいて結果を出したいと思っています。私のコードのこの部分を反応させるにはどうすればいいですか? (Meteor + React)

私は辞書は、ユーザーの選択肢を持つオブジェクトとキーごとの選択肢の量(EXです(小道具を経由して、親から子コンポーネントに、ユーザーの選択肢を渡す:私は、子コンポーネントで

<Childcomp aggregate={this.props.dictionary}/> 

dictionary = {Gallileo: 2, Juno: 1, Mars: 1})単純なループとcomponentWillMount()方法を経由して状態変数に選択し、投票数:

componentWillMount(){ 
    let obj = this.props.aggregate // {Gallileo: 2, Juno: 1, Mars: 1} 
    let choice; 
    for(let key in obj){ 
     if(key === this.props.option){ 
     choice = obj[key]; 
     break; 
     } 
    }; 

    let total = 0; 
    for(let key in obj){ 
     total += obj[key]; 
    } 

    this.setState({choice: choice, total: total}); 

}; 

私はこれを持っている問題は、入力を受信したときの状態変数が値を変更しないということですthis.props.aggregate反応的に変化するが、それ以降のすべては反応しない。

私はセッション変数を使ってリアクティブにしてみましたが、コードをTracker.autorun()に配置しようとしましたが、運がありません。

オブジェクトのforループはまったくトリガーされません。これは、this.props.aggregateプロップがシームレスに更新されても、状態変数が決して更新されない理由を説明しています。

答えて

1

小道具が変更されている場合は、componentWillReceivePropsメソッドを使用してください。

componentWillReceiveProps(nextProps){ 
    let obj = nextProps.aggregate // {Gallileo: 2, Juno: 1, Mars: 1} 
    let choice; 
    for(let key in obj){ 
     if(key === nextProps.option){ 
     choice = obj[key]; 
     break; 
     } 
    }; 

    let total = 0; 
    for(let key in obj){ 
     total += obj[key]; 
    } 

    this.setState({choice: choice, total: total}); 

}; 
+0

あなたは男です!私がリアクトを知っていると思ったとき、私は新しいことを学びます。ありがとう、トン。 –

関連する問題