首页 > 解决方案 > const 仅在解构时显示为未定义,而不是在重新分配给另一个 const 时

问题描述

更新:问题是我的初始状态是一个空数组,所以由于某种原因,它只是在尝试解构时出现问题,但我根据另一个平台上某人的一些建议进行了更改const lastMessage = messages.slice(-1)[0];const lastMessage = messages.slice(-1)[0] || {};一切都很好。我的错,我应该看到它,但被重新分配工作很好地甩掉了。感谢您的帮助。我会为您的评论和答案投票,但我的代表太低了。你很感激!

所以我正在用 Redux 构建一个基于 MERN 的聊天应用程序。我试图从我的数据库中的最后一条消息中提取数据,然后将该数据作为道具传递给 React 中的组件。我遇到的问题是,当试图解构原始的 const lastMessage 时,它​​(lastMessage)显示未定义。这就是我正在做的事情:

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] 的延迟或者在尝试拉动时使其未定义的东西出数据。

如果我只是像在下面的代码中那样重新分配它,那么它工作正常,我可以控制台记录数据,它就在那里。没有错误或问题,所以我知道这不是状态映射问题。一切都按预期显示在状态或控制台日志中。我在这里想念什么?

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。

当前状态 这是我当前状态的屏幕截图,如果它可以帮助任何人更好地了解整个画面。

提前感谢大家提供的任何帮助。

标签: javascriptreduxreact-reduxdestructuringmern

解决方案


我认为是因为真的是空的,如果你首先检查消息是否不为空,如:

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

推荐阅读