2017-03-09 13 views
1

反応アプリケーションで選択入力コントロールを定義するのにreact-selectを使用しています。これは私が部品を使用している方法です:反応選択でオプションを選択したときに入力値が変更されない

<Select 
    onChange={function(e) {console.log(e)}} 
    options={[ 
     {value: "sf", label: "San Francisco"}, 
     {value: "nyc", label: "New York City"} 
    ]} 
></Select> 

任意のオプションを選択する前に、私は、入力値としてSelect...プレースホルダを参照してください。オプションを選択すると変更されません。入力値は変更されず、Select...プレースホルダが選択された「オプション」のように見えます。

コンポーネントの使用方法に問題がありますか?

答えて

3

state変数でSelect値を定義し、logChange機能がobjectを返します、状態変数にそのobjectvalueを割り当て、それは動作しますが、このコードをチェックしてください:

class App extends React.Component{ 
 

 
    constructor(){ 
 
    super(); 
 
    this.state = {value: ''} 
 
    } 
 
    
 
    logChange(val) { 
 
    console.log("Selected: " + val.value); 
 
    this.setState({value: val.value}); 
 
    } 
 

 
    render(){ 
 
    var options = [ 
 
     {value: 'one', label: 'One' }, 
 
     {value: 'two', label: 'Two' } 
 
    ]; 
 
    return(
 
     
 
     <Select 
 
      name="form-field-name" 
 
      value={this.state.value} 
 
      options={options} 
 
      onChange={this.logChange.bind(this)} 
 
     /> 
 
     
 
    ) 
 
    } 
 
} 
 

 
ReactDOM.render(<App/>, document.getElementById('app'))
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script> 
 
<script src="https://unpkg.com/classnames/index.js"></script> 
 
<script src="https://unpkg.com/react-input-autosize/dist/react-input-autosize.js"></script> 
 
<script src="https://unpkg.com/react-select/dist/react-select.js"></script> 
 

 
<link rel="stylesheet" href="https://unpkg.com/react-select/dist/react-select.css"> 
 

 
<div id='app'/>

+0

私はあなたの答えを受け入れています、なぜなら、それは明らかにうまくいくからです。 Selectコンポーネントの内部状態を管理するのはなぜですか?オプションが選択されているときに、選択コンポーネントが入力値を設定することに責任があった場合、生産性が向上しないでしょうか?ユーザーがオプションを選択すると、Selectコンポーネントを再レンダリングするのではなく、アプリケーション全体を再レンダリングする必要があります(グローバル状態が変更されるため)。多分もっと良い方法がありますか? – snakile

関連する問題