2017-10-06 28 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