Как я могу вызвать метод при изменении даты окончания - PullRequest
1 голос
/ 29 июня 2019

Я использую даты реакции Airbnb . Я добавил его в свой проект, и он работает нормально, компонент выглядит так:

<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}
  />

Я только добавил его в свой проект, и, как вы можете видеть, у меня есть метод onDatesChange, и все в порядке, но мне интересно, как я могу вызвать какой-то метод, когда выбран END_DATE.

Например, я бы хотел что-то отфильтровать при прикосновении к дате окончания ...

Ответы [ 2 ]

2 голосов
/ 29 июня 2019

Вам необходимо использовать onFocusChange и onDatesChange реквизитов <DateRangePicker>, а также componentDidUpdate() React Метод жизненного цикла:

CodeSandbox

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}
      />
    );
  }
}
2 голосов
/ 29 июня 2019

Вам необходимо добавить обратный вызов в onDatesChange свойство:

<DateRangePicker
  {...dateRangePickerProps}
  onDatesChange={({ endDate }) => {
    console.log("End Date change callback"); // Your callback
  }}
/>;

...