У меня есть checkin
и checkout
поля и пытаюсь интегрировать pickaday jquery datepicker
в свой компонент, который реагирует pickaday. У меня есть поля checkin и checkout как состояние в родительском компоненте и передают их как реквизиты к компоненту datepicker
, который я создал. то, что я сделал, использует componentDidMount
для инициализации datepicker
, и он работает так, как ожидалось. Проблема здесь в том, что я могу только сначала установить minDate, а после этого не обновлять значение из реквизита при изменении состояния.добавление jquery для реагирования на состояние компонента и обновление
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
Неправильное место для обновления состояния при выборе date
на datepicker
. Может ли кто-нибудь сказать мне, что я делаю неправильно здесь?
Я бы лично не использовал jQuery UI-библиотеку с React и не нашел конкретную библиотеку React для использования. Основная проблема заключается в том, что как jQuery, так и React хотят контролировать DOM и иметь возможность мутировать DOM. Вы можете столкнуться с ситуациями, когда jQuery обновляет DOM/UI и React notices что-то изменил, но не изменил его. Затем он перезагрузит DOM так, как он хочет. У вас может не быть такого типа вопросов, но вы хотели бы привлечь его к вашему вниманию. – finalfreq
@finalfreq да .. Я думаю, что вы здесь. Но все библиотеки датпикера, которые я нашел для взаимодействия, используют webpack, и мне трудно использовать их с рельсами конвейер. Библиотека jquery легко интегрируется без каких-либо других зависимостей в моем случае, если она работает как ожидалось – Abhilash