javascript - const 仅在解构时显示为未定义,而不是在重新分配给另一个 const 时
问题描述
更新:问题是我的初始状态是一个空数组,所以由于某种原因,它只是在尝试解构时出现问题,但我根据另一个平台上某人的一些建议进行了更改const lastMessage = messages.slice(-1)[0];
,const lastMessage = messages.slice(-1)[0] || {};
一切都很好。我的错,我应该看到它,但被重新分配工作很好地甩掉了。感谢您的帮助。我会为您的评论和答案投票,但我的代表太低了。你很感激!
所以我正在用 Redux 构建一个基于 MERN 的聊天应用程序。我试图从我的数据库中的最后一条消息中提取数据,然后将该数据作为道具传递给 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] 的延迟或者在尝试拉动时使其未定义的东西出数据。
如果我只是像在下面的代码中那样重新分配它,那么它工作正常,我可以控制台记录数据,它就在那里。没有错误或问题,所以我知道这不是状态映射问题。一切都按预期显示在状态或控制台日志中。我在这里想念什么?
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。
当前状态 这是我当前状态的屏幕截图,如果它可以帮助任何人更好地了解整个画面。
提前感谢大家提供的任何帮助。
解决方案
我认为是因为真的是空的,如果你首先检查消息是否不为空,如:
if (messages) {
...
messages.slice(-1)[0]
...
}
推荐阅读
- java - Oracle Java 存储函数 - CLOB 的数据类型不一致
- angular - 在从每个项目导航时将活动设置为 li
- python - 如何将十进制值1从bluepy写入ble设备
- javascript - 如何在点击反应材料 UI 主题时关闭抽屉?
- excel - Excel 表格顶部的新行
- c# - 从类中获取列表返回为 null
- laravel - Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException 在laravel的crud中没有消息
- java - 在 UBER 等地图上为多辆汽车(标记)设置动画/移动
- amazon-web-services - Amazon EKS (Fargate):应用程序无法加载 AWS 凭证
- python - 熊猫:用列最大值替换列中的所有值