const отображается как неопределенное ТОЛЬКО при деструктурировании, НЕ при переназначении другому const - PullRequest
0 голосов
/ 20 марта 2020

ОБНОВЛЕНИЕ: проблема заключалась в том, что мое первоначальное состояние - пустой массив, поэтому по какой-то причине это была проблема только при попытке деструктурировать, но я изменяю const lastMessage = messages.slice(-1)[0]; на const lastMessage = messages.slice(-1)[0] || {}; по совету кого-то на другой платформе, и все хорошо. Моя вина, и я должен был это видеть, но был сбит с толку переназначением, работающим очень хорошо. Спасибо вам за помощь. Я бы проголосовал за ваши комментарии и ответы, но моя репутация слишком низкая. Спасибо!

Итак, я создаю приложение чата на основе MERN с Redux. Я пытаюсь извлечь данные из последнего сообщения в моей БД, а затем передать эти данные в качестве реквизита компоненту в React. Проблема, с которой я сталкиваюсь, заключается в том, что при попытке деструктурировать исходное const lastMessage, оно (lastMessage) показывает неопределенное. Вот что я делаю:

  • 1) Выводим исходное сообщение из состояния, содержащего массив объектов сообщения.
  • 2) Используйте messages.slice (-1 ) [0], чтобы назначить последний объект в массиве для const lastMessage.
  • 3) Тогда я ХОЧУ сделать, это деструктурировать lastMessage, чтобы извлечь нужные мне данные (текст и созданные), которые будут передается другому компоненту. Но если я попробую это, я получу ошибку «lastMessage is undefined». См. Пример ниже:
export const UserList = props => {
  const { members, messages } = props;
  const lastMessage = messages.slice(-1)[0];
  const { text, date } = lastMessage;
  console.log(text, date);

Ошибка не определена Здесь вы можете увидеть ошибку, с которой я сталкиваюсь при попытке деструктурировать. Кроме того, я думаю, что стоит отметить, что я попытался выполнить деструктурирование непосредственно из messages.slice (-1) [0] следующим образом: const { text, created } = messages.slice(-1)[0], но это не сработало, та же ошибка. Вот почему я задавался вопросом, нужно ли мне сначала создать новый const, по какой-то причине, может быть, я пропустил, например, может быть задержка в .slice (-1) [0] или что-то, что делало его неопределенным при попытке вытянуть out of data.

Если я просто переназначу его, как я делал в приведенном ниже коде, то он будет работать нормально, и я смогу сохранить данные в консоли, и все это там. Нет ошибок или проблем, поэтому я знаю, что это не проблема отображения состояния. Все отображается как ожидалось в состоянии или в журнале консоли. Что мне здесь не хватает?

export const UserList = props => {
  const { members, messages } = props;
  const lastMessage = messages.slice(-1)[0];
  const example = lastMessage;
  console.log(example);

Журнал консоли примера const Вы также можете увидеть этот снимок экрана, который показывает, когда я просто переназначаю новый const example = lastMessage, а затем консоль регистрирует этот новый Пример const.

Текущее состояние Вот снимок экрана с моим текущим состоянием, если оно помогает кому-нибудь увидеть всю картину немного лучше.

Заранее всем спасибо за любую помощь Вы можете предложить.

1 Ответ

0 голосов
/ 20 марта 2020

Я думаю, потому что это действительно пусто, что если вы сначала проверите, если сообщения не пусты, как:

if (messages) { 
   ... 
   messages.slice(-1)[0] 
   ... 
}
...