У меня проблема с установкой состояния с помощью оператора распространения, но вызов функции в useEffect
только когда устанавливает последнее значение, полученное из API, в состояние.
// get all events to display on load
const getEvents = () => {
console.log(props.id);
axios.get(API.EVENTS.ROOT + props.id).then(
res => {
const data = res.data;
setEvent(data);
console.log(data);
// event start and end dates
setStart(new Date(data.start));
setEnd(new Date(data.finish));
// breakout dates
for (let i = 0; i < data.breakouts.length; i++) {
console.log(data.breakouts[i].start);
data.breakouts[i].start = new Date(data.breakouts[i].start);
data.breakouts[i].end = new Date(data.breakouts[i].end);
console.log(data.breakouts[i].name, "test" + data.breakouts[i].start);
// set date picker initial value
setFields({
...fields,
[data.breakouts[i].name]: data.breakouts[i].start
})
console.log(fields);
}
setBreakoutRow(data.breakouts);
console.log(breakoutRow);
}
).catch(err => {
console.log(err);
})
}
// get events on load
useEffect(() => {
console.log(props);
getEvents();
}, []);
Я добавляю переменную состояния полей или функцию getEvents
в качестве зависимости, которая обновляет state
полей для всех значений, но это приводит к бесконечному циклу смерти. Это дает мне пустые даты в отображенных строках для всех, кроме последнего.
Еще одним примечанием является то, что после загрузки страницы объект полей можно без проблем обновить с помощью вызова функции, например:
const handleDateChange = (dateName, dateValue) => {
console.log(dateName, dateValue);
setFields({
...fields,
[dateName]: dateValue
})
console.log(fields);
}
Это наводит меня на мысль, что что-то не такс моим useEffect
крючком, но я не уверен, где он идет не так.