Почему значение моего начального состояния в useState не определено? - PullRequest
1 голос
/ 08 мая 2020

В следующем коде. Я использую функцию для получения начального значения переменной состояния. Но когда я кодирую консольный журнал в функции и после запуска функции (b и c), состояние nextAppointment не устанавливается. Помогите!

Я добавил корову со случайной переменной, которая правильно настроена с помощью той же функции, чтобы показать, что мои исходные данные в порядке.

const getNextAppointment = appointments => {
  let currentTime = moment();
  let nextAppt = appointments.find(a => a.AppointmentDateTime > currentTime);
  console.log('B', nextAppt);
  return nextAppt;
};

function AppointmentListByDate(props) {
  let appointments = props.appointments.sort((a, b) => a.AppointmentDateTime - b.AppointmentDateTime);
  console.log('A');
  var [nextAppointment, setNextAppointment] = React.useState(getNextAppointment(appointments));
  console.log('C', nextAppointment);
  var cow = getNextAppointment(appointments);
  console.log('D', cow);
  render(<div>Hello World</div>);
}

ОБНОВЛЕНИЕ: изменено a => a.AppointmentDateTime > currentTime на a => a.AppointmentDateTime.isAfter(currentTime) в методе find без положительных результатов.

1 Ответ

0 голосов
/ 08 мая 2020

Я не вижу проблем в общем коде, но могу указать 1 область, которая может вызывать у вас проблемы.

Думаю, это moment(), который возвращает объект даты. Я не уверен, какой у вас формат встречи в props, поэтому, если вы можете поделиться этими деталями, я, вероятно, смогу поделиться всем кодом или просто попробовать, это не должно быть так сложно.

Я создал демонстрацию без moment, которая отлично работает.

https://codesandbox.io/s/serene-davinci-quxz1?fontsize=14&hidenavigation=1&theme=dark

Также вместо того, чтобы напрямую помещать функцию в useState, попробуйте это

  const initialNextAppointment = getNextAppointment(appointments);
  var [nextAppointment, setNextAppointment] = React.useState(
    initialNextAppointment
  );

Сообщите мне, если это поможет!

...