【发布时间】:2016-12-12 17:46:06
【问题描述】:
我有 checkin 和 checkout 字段,我正在尝试将 pickaday jquery datepicker 集成到我的反应组件 pickaday。我将签入和签出字段都作为父组件中的状态,并将它们作为道具传递给我创建的datepicker 组件。我所做的是使用componentDidMount 来初始化datepicker,它按预期工作。这里的问题是我最初只能设置 minDate ,之后它不会随着状态的变化而更新 props 的值。
DatePicker.js.jsx
var DatePicker = React.createClass({
//This is a callback to parent component for updating the state
changeDuration: function (date) {
this.props.onChange(this.props.name, date);
},
componentDidMount: function () {
var _self = this;
var picker = new Pikaday({
field: document.getElementById(this.props.name),
format: 'D MMM YYYY',
onSelect: function () {
_self.changeDuration(this.getMoment().toDate())
},
minDate: this.props.minDate
});
},
render: function () {
return (
<input type="text" id={this.props.name} defaultValue={this.props.value}/>
)
}
});
在父组件中,我像这样调用上面的组件(我传递的minDate 只会在初始加载时工作,之后就不能工作了??)
{/*Checkin and checkout dates*/}
<div className="col s12 m6 l6 rd-custom-input">
<DatePicker name={'checkIn'} value={this.props.checkIn}
onChange={this.handleNamedChange} minDate={this.props.checkIn}/>
</div>
<div className="col s12 m6 l6 rd-custom-input">
<DatePicker name={'checkOut'} value={this.props.checkOut}
onChange={this.handleNamedChange} minDate={this.props.checkIn}/>
</div>
我怀疑componentDidMount 在datepicker 上选择date 时更新状态的位置错误。有人可以告诉我这里做错了什么吗?
【问题讨论】:
-
我个人不会在 React 中使用任何 jQuery UI 库,而是找到一个 React 特定库来使用。主要问题是 jQuery 和 React 都希望控制 DOM 并能够改变 DOM。您可能会遇到 jQuery 更新 DOM/UI 并且 React 注意到某些更改但它没有更改它的情况。然后它将按照它想要的方式重新渲染 DOM。您可能没有遇到此类问题,但希望引起您的注意
-
@finalfreq 是的..我想你就在这里..但是我为 react 找到的所有 datepicker 库都使用 webpack,我发现很难与 rails 资产管道一起使用。如果按预期工作,jquery 库很容易集成,在我的情况下没有任何其他依赖项
标签: javascript jquery reactjs datepicker