Передача ссылки вперед динамически создаваемым дочерним элементам
Я использую компонент React Infinite Calendar и хочу перенаправить ссылку на динамически созданные дочерние компоненты. Таким образом я могу получить доступ к первой активной дате. Чтобы прокрутить его в поле зрения. (способ реагировать)
это ванильный способ javascript:
const enabledDate = document.getElementsByClassName('Cal__Day__enabled');enabledDate[0].scrollIntoView();
Я делаю это в реакции, но не могу получить доступ к дочерним элементам в ref.current. В настоящее время я использую реакцию без сохранения состояния
import React, { memo, useEffect, useRef } from 'react';
import PropTypes from 'prop-types';
import InfiniteCalendar, { Calendar, withRange } from 'react-infinite-calendar';
import '../../styles/datePicker.css';
import styles from './style.scss';
const datePickerStyleformat = {
accentColor: '#0073BA',
selectionColor: '#0073BA',
textColor: {
default: '#333',
active: '#FFF',
},
weekdayColor: 'rgb(241, 243, 244)',
headerColor: '#F1F3F4',
floatingNav: {
background: '#FFFFFF 0% 0% no-repeat padding-box',
color: '#3F464D',
chevron: '#FFA726',
},
};
function DatePicker(dates) {
useEffect(() => {
var q = ref.current;
console.log(q);
// If you dont have value for the first date, datepicker automatically sets 12/31,
// this function clears that
const x = document.getElementsByClassName('Cal__Header__date');
x[1].innerHTML = '';
const enabledDate = document.getElementsByClassName('Cal__Day__enabled');
enabledDate[0].scrollIntoView();
}, []);
const { date__select, DatePickerStyle } = styles;
const {
dateStart,
dateEnd,
selectedStart,
selectedEnd,
allowNewReservations,
} = dates.dates;
const passSelectedDate = () => e => {
let datesPicked = null;
const endPicked = e.eventType === 1 ? null : e.end;
if (e.eventType !== 2) {
datesPicked = {
selectedStart: e.start,
selectedEnd: endPicked,
dateEnd,
dateStart,
allowNewReservations,
};
dates.passUpTheChain(datesPicked, true);
}
};
const ForwardRefDatePicker = React.forwardRef((props, ref) => (
<InfiniteCalendar
ref={ref}
className={DatePickerStyle}
theme={datePickerStyleformat}
Component={withRange(Calendar)}
selected={{
start:
selectedStart !== null
? selectedStart
: dates.selectedDate.pickedStartDate,
end:
selectedEnd !== null ? selectedEnd : dates.selectedDate.pickedEndDate,
}}
min={dateStart}
minDate={dateStart}
maxDate={dateEnd}
max={dateEnd}
height={165}
width={375}
displayOptions={{
overscanMonthCount: 0,
showOverlay: false,
showTodayHelper: false,
}}
onSelect={passSelectedDate()}
>
{props.children}
</InfiniteCalendar>
));
const ref = React.createRef();
return (
<div className={date__select}>
<ForwardRefDatePicker ref={ref} />
</div>
);
}
DatePicker.propTypes = {};
export default memo(DatePicker);