2017-02-15 3 views
0

私の状態のArrayオブジェクトが オブジェクトの名前、私はので、私は親コンポーネントに私の状態オブジェクトで、のようなもの持っている:更新プロパティオブジェクト

object:[{id:1, name:"name"},{id:2, name:"name2"}]; 

を私は選択ボックスを持っています

var elements = this.state.object.map(function(element, k){ 
     return (

     <Components object={this.state.object} element={element} setPropertyElement={this.setPropertyElement} />   

     ) 
     }, this); 
:子コンポーネントにアレイ内のすべてのオブジェクトと選択のためのような小道具で渡さthis.props.object.mapが印刷されていますしたがって、この場合には、私は私のページに変更名を選択し、関連を持つ2つの要素を参照してください

<select className="form-control" ref="name" defaultValue="j" onChange={this.change}> 
    <option value="j">j</option> 
    <option value="x">x</option> 
</select> 

:3210は

子コンポーネントでは、私は次のように変更機能を備えた選択があります。 私はの機能変更を持っています。私の親要素で

change(event){ 
    this.props.setPropertyElement(this.props.element, event.target.value); 
} 

私は機能setPropertyElement持っているので:

setPropertyElement(element, value){ 

     element.name = value; 
    } 

を私の質問は: 私の操作が正しいか、私は間違った方法状態オブジェクトに・修正していますか? この場合どのようにして配列のプロパティオブジェクトの値を正しく変更できますか?

+0

'this.props.element'は何ですか? 'setPropertyElement'も小道具として渡されますか?これを反映するために、あなたの ''行を更新してください。 – Chris

+0

こんにちはクリス、おかあさん、私の質問を編集した、props.elementは、.mapによってコンポーネントに渡された状態オブジェクトの要素です – LorenzoBerti

+0

'this.props.setPropertyElement'についてはどうですか?それは親から子への支柱として受け継がれているようには見えません。 – Chris

答えて

2

あなたは正しい方向にあります。すでに述べたように、状態を変更するには、setState({})を呼び出します。ここでは、更新する要素を指定する必要があります。あなたがspread operatorを使用する場合は、このケースでは、このようになります。

this.setState({object: [ 
    ...this.state.object.filter(x => element.ID !== x.ID), 
    { id: element.id, name: element.name } 
]}) 
+0

こんにちはjuncab、ありがとう、あなたのメソッドでは正しい状態を使用するが、上記の私のメソッドではsetStateを使わずに単にプロパティに値を代入します。 – LorenzoBerti

+0

あなたの投稿を更新してコード全体を追加できたら、なぜそれが機能するか教えてもらえます。これらのコードを見るだけではわかりにくいです。 – juancab

0

これを試してみてください:

let editableComparatorIndexes = [...this.state.ids]; 
    editableComparatorIndexes[i] = 1; 
    this.setState({editableComparatorIndexes}); 
関連する問題