2016-12-20 4 views
1

ここで何が間違っていますか? (おそらくすべて)。私は 'foo'を選択肢として選択し、値が1になるようにしたいと思います。私が得るエラーは、 'オブジェクトはリアクションの子としては有効ではありません'です。jsonオブジェクトからドロップダウンリストを作成する方法は?

constructor(props) { 
    this.state = {options: {name: 'foo', value: 1}}; 
    } 

render() { 
    return (
     <div> 
      <select>{this.state.options}</select> 
     </div> 
    ); 
} 
+0

オプションは '{name、value}'オブジェクトの配列になりますか?現在のデータ構造がどのようにオプションに変換されているかわからない –

答えて

2

まず、オプションをオブジェクトの配列にしたいと思います。次に、あなたのレンダリング機能では、このような何かを:

constructor(props) { 
    super(props); 
    this.state = {options:[{name: 'foo', value: 1}]}; 
} 
render() { 
    return <div> 
    <select>{this.state.options.map(function(item) { 
     return <option value={item.value}>{item.name}</option>; 
    })}</select></div> 
} 
+0

オプションでオブジェクトの配列が作成され、コードが実装されました。もう爆弾は出ないが、リストは空だ。 – nikotromus

+0

確かにそれは*のように見えるでしょう... ;-) – nikotromus

+0

コンストラクタはこのように見えますか?: コンストラクタ(小道具){ this.state = {options:[{name: 'foo'、value: 1}]}; } –

2

#1:あなたは絶対にあなたのコンポーネントのstateで、これらのオプションを保存する必要はありません。

#2:オブジェクトを配列に置き換え、Array#mapを使用して各オプションをレンダリングします。

render() { 
    const options = [{ name: 'foo', value: 1 }] 
    return (
    <select> 
     {options.map(option => 
     <option value={option.value}>{option.name}</option> 
    )} 
    </select> 
) 
} 
+1

大きなアドバイス!私は状態に値を格納する必要はありません。 – nikotromus

関連する問題