2017-03-09 70 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

相關問題