2016-06-29 38 views
0

私が渡した2つのパラメータがありますが、次の例で使用する方法がわかりません。可能であればお手伝いください。だからここMeteor渡されたパラメータで使用する方法に反応しますか?

updater(layer, item){ 
    this.setState({layer5: <img id="layer5" className="on-top img-responsive center-block" name="layer5" src="images\5.png" />}); 
} 

は、現時点では私のコードで、私がやりたいことは、次のようなものです:

updater(layer, item){ 
    this.setState({{layer}: <img id={layer} className="on-top img-responsive center-block" name={layer} src={item.src} />}); 
} 

しかし、これは私に、構文エラーになります。

UPDATE: は変更後、私は渡された正しい値を取得していますが、状態は、何らかの理由で更新されていません:あなたはあなたの状態でコンポーネントに反応保管してはならない

constructor(){ 
    super(); 
     this.renderView = this.updater.bind(this); 
     this.state = { 
       layer1: "1.png", 
       layer2: "", 
       layer3: "" 
     }; 
    } 


     updater(layer, item){ 
      console.log(layer); //shows as "layer1" 
      console.log(item); // shows as "3.png" 
      this.setState({layer: item}); 
    } 

答えて

1

。代わりに、レンダリングを行うと、実際にrender()機能でコンポーネントをレンダリングするために必要な情報を格納します。

updater(layer, item){ 
    this.setState({ 
     layer5: { 
      layer: layer, 
      item: item 
     } 
    }); 
} 

render() { 
    var layer5 = (
     <img 
      id={this.state.layer5.layer} 
      className="on-top img-responsive center-block" 
      name={this.state.layer5.layer} 
      src={this.state.layer5.item} 
      /> 
    ) 

     ... 
} 
+0

おかげでアップデートを参照してください。まだしかし、問題を持っているので、画像のみが使用され、残りはレンダリングでレンダリングされ、それを変更しました – sophia

+0

@sophia '{layer:item}'はあなたが思っていることをしないと思います。あなたの例では、 '{layer1: '3.png'}'ではなく、 '{layer: '3.png'}'というオブジェクトになります。代わりに、次のようなものを試してください: 'var newState = {}; newState [layer] = item; this.setState(newState); ' – Timo

+0

完璧な作品、説明してくれてありがとう! – sophia

関連する問題