#reactjs
#reactjs
Вопрос:
В устаревшем веб-приложении мы пытаемся внедрить React шаг за шагом. Наш первый компонент — это средство выбора даты, которое имеет просто один реквизит с начальным значением:
<DatePicker date="2020-08-15" />
Это отлично работает в базовых случаях.
Теперь мы хотим использовать компонент на странице списка событий, где перечислены несколько событий. Если пользователь нажимает на событие, то будет показано небольшое диалоговое окно редактора, в котором можно отредактировать дату события. Дата события указана в атрибуте данных, подобном этому:
<div class="event" data-event-date="2020-08-15">...</div>
<div class="event" data-event-date="2020-09-25">...</div>
<div class="event" data-event-date="2020-10-07">...</div>
Пожалуйста, обратите внимание, что на этой странице используется обычный JavaScript, поэтому всем элементам события назначен простой обработчик события click. Этот обработчик событий показывает диалоговое окно с реагирующим компонентом DatePicker.
Как я могу повторно перенаправить компонент DatePicker со значением даты, присвоенным выбранному событию?
Ответ №1:
Вот очень быстрый макет. Вам нужно было бы внедрить более надежные проверки и, очевидно, адаптировать специфику к вашей кодовой базе, но это иллюстрирует базовое взаимодействие vanilla / React.
let DATE = null;
function Confirmation({date}) {
return (
<div>
{date ? (
<DatePicker date={date} />
) : null
}
</div>
);
}
function DatePicker({date}) {
return (
<div class="datepicker">{date}</div>
);
}
function setDate(e) {
DATE = e ? e.target.getAttribute('data-event-date') : null;
ReactDOM.render(<Confirmation date={DATE} />, document.getElementById("root"));
}
document.querySelectorAll('.event').forEach(el => el.addEventListener('click',(e) => setDate(e)))
ReactDOM.render(<Confirmation data={DATE} />, document.getElementById("root"));
#container {
margin: 8px auto;
}
btn {
background-color: gray;
border: 1px solid black;
padding: 4px;
margin: 8px;
}
.datepicker {
padding: 8px;
margin: 8px;
background-color: green;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.4/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.4/umd/react-dom.production.min.js"></script>
<div id="container">
<btn type="button" class="event" data-event-date="2020-08-15">2020-08-15</btn>
<btn type="button" class="event" data-event-date="2020-09-25">2020-09-25</btn>
<btn type="button" class="event" data-event-date="2020-10-07">2020-10-07</btn>
<btn type="button" class="event" onClick="setDate(null)">Clear</btn>
<div id="root"></div>
</div>