2017-01-18 6 views
1

複数のSelectFieldおよびDropDownMenuコンポーネントをプログラムでレンダリングしています。私は単一のonChangeハンドラ関数で作業しようとしていますが、イベントをトリガした特定のSelectField/DropDownMenuを参照する方法が見つからないため、それに従って状態を更新できます。 onChangeイベントに渡されたパラメータには、起動コンポーネントを識別するための有用な情報が含まれていないようです。何か案は?[SelectField] [DropDownMenu]が発生しました。変更しました。

答えて

6

はここで、これは

https://jsfiddle.net/davidebarros/k9ng7bk9/

この

はあなたがES6矢印関数の構文に精通していると仮定されて行うことができる方法の例です。

state = { 
    dropDown1: 1, 
    dropDown2: 4, 
    selectfield1: null, 
    selectfield2: null 
} 

onChange = (type) => (event, index, value) => { 
    this.setState({ 
    [type]: value 
}) 


//In your render method 
<SelectField 
     floatingLabelText="Select Field 1" 
     value={this.state.selectfield1} 
     onChange={this.onChange("selectfield1")}> 
     <MenuItem value={1} primaryText="Select 1, value 1" /> 
     <MenuItem value={2} primaryText="Select 1, value 2" /> 
</SelectField> 
+0

'event'オブジェクトから値を取得する方法はありますか?私は、テスト中にチェンジイベントをシミュレートするために酵素を使用しています。イベントオブジェクトを渡すことができます: 'selectField.simulate( 'change'、{ target:{value: 'newValue'}、 });' – Doug

+0

または 'onChange'関数を' this.setState({[type]:value || event.target.value}) 'に変更してみてください。' –

+0

これは素晴らしいことではありませんが、一時的な解決策です。 'MaterialUI'のやり方であり、イベントオブジェクトから取得する方法はありません。 'Enzyme'も、この場合、より多くのパラメータ'(event、index、value) 'を使って' onChange'をシミュレートすることをサポートしていないようです。乾杯! – Doug

関連する問題