Javascript 常量仅在分解结构时显示为未定义,而在重新分配给另一个常量时显示为未定义

Javascript 常量仅在分解结构时显示为未定义,而在重新分配给另一个常量时显示为未定义,javascript,redux,react-redux,destructuring,mern,Javascript,Redux,React Redux,Destructuring,Mern,更新:问题是我的初始状态是一个空数组,因此出于某种原因,这只是尝试解构时的问题,但我更改了const lastMessage=messages.slice(-1)[0]toconst lastMessage=messages.slice(-1)[0]|{}根据另一个平台上某人的建议,一切都很好。我的错,我本应该看到的,但被重新分配的工作抛在脑后了。谢谢你的帮助。我会对你的评论和回答投赞成票,但我的支持率太低了。谢谢你 所以我正在用Redux构建一个基于MERN的聊天应用程序。我试图从数据库中的最

更新:问题是我的初始状态是一个空数组,因此出于某种原因,这只是尝试解构时的问题,但我更改了
const lastMessage=messages.slice(-1)[0]
to
const lastMessage=messages.slice(-1)[0]|{}根据另一个平台上某人的建议,一切都很好。我的错,我本应该看到的,但被重新分配的工作抛在脑后了。谢谢你的帮助。我会对你的评论和回答投赞成票,但我的支持率太低了。谢谢你

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

  • 1) 将原始消息prop移出状态,该状态具有 消息对象
  • 2) 使用messages.slice(-1)[0]将数组中的最后一个对象分配给const 最后一条消息
  • 3) 然后我要做的是对lastMessage进行解构,以拉出 我想要的数据(文本和创建的),将传递给 另一个组成部分。但如果我尝试这个,我得到的最后一条信息是 “未定义”错误。见下例:
在这里,您可以看到我在尝试分解结构时遇到的错误。另外,我认为值得注意的是,我尝试过直接从messages.slice(-1)[0]进行解构,如下所示:
const{text,created}=messages.slice(-1)[0]
,但没有成功,同样的错误。这就是为什么我想知道是否需要先创建一个新常量,原因可能是我丢失了,比如.slice(-1)[0]中的延迟,或者在尝试提取数据时使其未定义

如果我像在下面的代码中那样简单地重新分配它,那么它工作得很好,我可以通过控制台记录数据,所有数据都在那里。没有错误或问题,所以我知道这不是状态映射问题。所有内容都按预期显示在状态或控制台日志中。我错过了什么

export const UserList = props => {
  const { members, messages } = props;
  const lastMessage = messages.slice(-1)[0];
  const example = lastMessage;
  console.log(example);
您还可以看到这个屏幕截图,它显示了我只需重新分配一个新的
const example=lastMessage
,然后控制台记录该新的示例const

这是我当前状态的截图,如果它能帮助任何人更好地看到整个画面的话


提前感谢您提供的任何帮助。

我认为这是因为邮件确实是空的,如果您首先检查邮件是否不是空的,如:

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

在解构之前,您是否可以记录
消息
lastMessage
?是否可能
消息
为空?(我意识到这并不能解释重新分配行为,但您所描述的似乎非常不可能。)和/或在分解结构行之前设置一个断点,并检查这些变量以确认它们是您认为的吗?
if (messages) { 
   ... 
   messages.slice(-1)[0] 
   ... 
}