Доступ к значениям this.state из дочернего компонента
У меня проблемы с передачей значений даты из компонента act-date в родительский компонент.
Во-первых, я бы обычно справлялся с такой задачей с помощью Redux, но это излишне для проекта и я бы предпочел простое решение.
Как я могу пройти onChange
события из DateRangePicker
к его родительскому компоненту?
Родительский компонент
...
import DateRangePicker from './DatepickerRates'
class Rates extends Component {
constructor(props) {
super(props);
this.state = { }
}
onChange(startDate, endDate) {
this.setState({[startDate]: startDate});
this.setState({[endDate]: endDate});
}
render() {
console.log(`In ${this.state.startDate} - Out ${this.state.endDate}`)
return (
<Wrapper>
<DateRangePicker onChange={this.onChange.bind(this)}/>
</Wrapper>
);
}
}
export default Rates;
DateRangePicker
...
class DateRangePickerWrapper extends Component {
constructor(props) {
super(props);
this.state = {
focusedInput,
startDate: props.initialStartDate,
endDate: props.initialEndDate,
}
this.onDatesChange = this.onDatesChange.bind(this);
this.onFocusChange = this.onFocusChange.bind(this);
}
onDatesChange({ startDate, endDate }) {
const { stateDateWrapper } = this.props;
this.props.onChange('startDate', this.state.startDate);
this.props.onChange('endDate', this.state.endDate);
this.setState({
startDate: startDate && stateDateWrapper(startDate),
endDate: endDate && stateDateWrapper(endDate),
});
}
render() {
const { startDate, endDate } = this.state;
...
return (
<div>
<DateRangePicker
{...props}
onDatesChange={this.onDatesChange}
onFocusChange={this.onFocusChange}
focusedInput={focusedInput}
startDate={startDate}
endDate={endDate}
/>
</div>
);
}
}
export default DateRangePickerWrapper;
2 ответа
Здесь работает демоверсия - https://codesandbox.io/s/vqw83my5l0 на вашем родительском компоненте установите опору как onChange={this.handleDropDownChange}
и в дочернем компоненте onChange даты, в onDatesChange и наборе функции this.props.onChange(startDate, endDate)
и вы получите данные в handleDropDownChange()
Передайте функцию onChange в качестве реквизита дочернему компоненту, как это
import DateRangePicker from './DatepickerRates'
class Rates extends Component {
constructor(props) {
super(props);
this.state = {
startDate: '',
endDate: '',
}
}
onChange = (startDate, endDate) => {
this.setState({
startDate: startDate,
endDate: endDate
});
}
render() {
...
return (
<Wrapper>
<DateRangePicker
onChange={this.onChange}/>
</Wrapper>
);
}
}
export default Rates;
затем из дочернего компонента измените вашу функцию onDatesChange на
onDatesChange({ startDate, endDate }) {
const { stateDateWrapper } = this.props;
console.log('startDate: ', startDate)
console.log('endDate: ', endDate)
this.props.onChange(startDate, endDate);
this.setState({
startDate: startDate && stateDateWrapper(startDate),
endDate: endDate && stateDateWrapper(endDate),
});
}
примечание Я добавил журналы, чтобы проверить, получаете ли вы значения даты начала и окончания