Как мне запустить onchange на всех экземплярах компонента в моем приложении?
Например:
Я создал раскрывающийся список как компонент (DDComp), который я использую в нескольких местах как дочерний элемент в других компонентах. При изменении этого DDComp он вызывает замену своего родительского компонента. Это отлично работает.
Чего я хочу добиться, так это то, что всякий раз, когда кто-то меняет раскрывающийся список, он должен срабатывать при изменении во всех экземплярах этого DDComp на странице.
Это изображение лучше объяснит, что я пытаюсь сделать.
import React, { Component } from 'react';
import ReactDOM from 'react-dom';
import DateRangePicker from 'react-bootstrap-daterangepicker';
import moment from '../../../plugins/moment/moment.js';
class DDComp extends Component {
constructor(props) {
super(props);
this.changeHandler = this.changeHandler.bind(this);
this.display_value = 'Filters';
}
changeHandler(e, picker) {
if (typeof this.props.onChange === 'function') {
let start_date = '';
let end_date = '';
if(picker.startDate)
start_date = picker.startDate.format().split('T')[0];
if(picker.endDate)
end_date = picker.endDate.format().split('T')[0];
this.props.onChange(start_date, end_date);
this.display_value = picker.chosenLabel;
}
}
render() {
let ranges = {
"Today": [moment(), moment()],
"Yesterday": [moment().subtract(1, "day"), moment().subtract(1, "day")],
"Last 7 days": [moment().subtract(7, "days"), moment().subtract(1, "day")],
"Last 30 days": [moment().subtract(30, "days"), moment().subtract(1, "day")],
"This month": [moment().startOf("month"), moment().endOf("month")],
"Last month": [moment().subtract(1, "month").startOf("month"), moment().subtract(1, "month").endOf("month")],
};
return (
<div className={"dropdown float-right"}>
<DateRangePicker applyClass="devcon-dtp" ranges={ranges} onApply={this.changeHandler}>
<button className={"dd-ajax-filter btn btn-outline-secondary btn-sm"} type="button">{this.display_value}</button>
</DateRangePicker>
</div>
);
}
}
export default DDComp;