I'm using Airbnb react-dates. I've added it to my project and it's working fine, the component looks like this:
<DateRangePicker
startDate={this.state.startDate} // momentPropTypes.momentObj or null,
startDateId="your_unique_start_date_id" // PropTypes.string.isRequired,
endDate={this.state.endDate} // momentPropTypes.momentObj or null,
endDateId="your_unique_end_date_id" // PropTypes.string.isRequired,
onDatesChange={this.onDatesChange} // PropTypes.func.isRequired,
focusedInput={this.state.focusedInput} // PropTypes.oneOf([START_DATE, END_DATE]) or null,
onFocusChange={focusedInput => this.setState({ focusedInput })} // PropTypes.func.isRequired,
daySize={50}
noBorder={true}
isOutsideRange={() => false}
/>
I just added it to my project, and as you can see there is my method onDatesChange and everything is fine, but I'm wondering how can I trigger some method when END_DATE
is selected.
For example, I would like to filter something when the end date is touched...
You need to use onFocusChange
and onDatesChange
props of <DateRangePicker>
, and also componentDidUpdate()
React lifecycle method:
import React, { Component } from "react";
import "react-dates/initialize";
import "react-dates/lib/css/_datepicker.css";
import { DateRangePicker } from "react-dates";
import { START_DATE, END_DATE } from "react-dates/constants";
export default class Dates extends Component {
state = {
startDate: null,
endDate: null,
focusedInput: null
};
onDatesChange = ({ startDate, endDate }) =>
this.setState({ startDate, endDate });
onFocusChange = focusedInput => this.setState({ focusedInput });
componentDidUpdate(prevProps, prevState) {
if (
prevState.focusedInput !== this.state.focusedInput &&
this.state.focusedInput === END_DATE
) {
alert("End date is focused!"); // your code here
}
if (prevState.endDate !== this.state.endDate) {
alert("End date is changed!"); // your code here
}
}
render() {
const { startDate, endDate, focusedInput } = this.state;
return (
<DateRangePicker
startDate={startDate}
startDateId={START_DATE}
endDate={endDate}
endDateId={END_DATE}
onDatesChange={this.onDatesChange}
focusedInput={focusedInput}
onFocusChange={this.onFocusChange}
/>
);
}
}