2017-10-06 72 views
0

我使用react-bootstrap-datetimerangepicker庫與bind()從日曆中獲取選定的日期,但該庫的'onApply'函數傳遞2個參數(事件,選擇器),並在'預定義'我沒有得到startDate和endDate,假設它會在第二個參數中出現。而如果沒有綁定它不工作無法使用預定義的綁定功能

<DatetimeRangePicker 
    timePicker 
    showDropdowns 
    timePicker24Hour 
    onApply={this.handleChange.bind(this, 'predefined')} /> 


handleChange(event, picker) { 
     this.props.sendDateRanges(payload); 
    } 

https://github.com/luqin/react-bootstrap-datetimerangepicker

回答

1

您需要綁定this您handleChange功能它有詞法範圍。否則,handleChange沒有你的組件的this的概念,因爲它的作用域是有限的。你的情況下,第二/後續的綁定參數是不必要的。上面的操作只是在arguments數組前預先加上「預定義」字符串。相反,只需將綁定函數傳遞給onApply道具。

onApply={this.handleChange.bind(this)}

如果您使用ES6類來定義您的組件,一個常見的模式是預先綁定所有的事件處理程序和函數的構造。

constructor(props) { 
    super(props) 
    this.handleChange = this.handleChange.bind(this) 
} 
handleChange(event, picker) { 
    //code 
} 
render() { 
    return <div onChange={this.handleChange} /> 
} 

如果你想更有趣,你可以使用箭頭函數語法來隱式地綁定詞法範圍。無需在任何地方調用綁定。

handleChange = (event, picker) => { 
    //code 
} 
render() { 
    return <div onChange={this.handleChange} /> 
} 
+0

謝謝,@ kngroo。這工作,但通過在點擊應用按鈕上使用handleChange()函數,我試圖調用redux以反映選擇器中的日期更改,但直到reducer我得到新的選定日期,但沒有在選擇器中,因此沒有更新獲取componentWillReceiveProps()中的nextprops 。你能告訴我錯過了什麼嗎? – NSh

+0

不看代碼就很難調試你的問題。如果你想在redux中存儲和更新日期選擇器的值,你需要通過調用'picker'數據調用redux的調度方法來調用handleChange函數中的一個動作。假設您的redux設置正確完成,您需要確保您的組件與redux「連接」。 '連接(mapStateToProps)(YourComponent)' – kngroo

+0

https://stackoverflow.com/questions/46636800/react-selector-is-not-been-called在這裏我發佈的問題,我確實調用了redux – NSh