javascript - 数组引用表现得像一个副本
问题描述
一开始,该应用程序总是有 100 个帖子。
以下是我处理 DELETE 操作的方式:
handleDelete = async post => {
const oldPosts = this.state.posts;
const posts = this.state.posts.filter(n => n.id !== post.id);
this.setState({ posts });
try {
await axios.delete(`${apiEndpoint}/${post.id}`);
console.log(oldPosts);
} catch (e) {
alert("There was an error while removing post " + post.id);
}
};
oldPosts 变量包含对状态数组的引用。正如您在接下来的两行中所看到的,我正在使用较少数量的帖子(其中 99 个)更新状态。我希望我的 oldPosts 引用指向这个 99 元素数组。但是,当它是 console.logged 时,我看到 100 个元素。这是为什么?
解决方案
const oldPosts = this.state.posts;
这会将对数组的引用复制到oldPost
变量中。如果里面的数组this.state.posts
改变了,你会在里面看到这些改变oldPosts
,但是如果引用本身改变了,那么oldPost
和this.state.posts
指向两个不同的数组。
使用.filter
你创建一个新数组。
推荐阅读
- python - Python 对象及其元素
- html - 为什么 div 垂直而不是水平显示?
- c# - 侦听器自动检测来自 Amazon SQS 的消息并检索它们
- linux - 基本操作系统有时登录时一台外接显示器变黑
- persistence - mosquitto.db 文件未创建
- javascript - 带有 Reactjs 的 Axios 发布表单
- hive - Hive表删除和查询处理
- java - Android - 蓝牙 - 写入结束时崩溃
- android - 在 Titanium 中实现 Ti.goosh 推送通知模块以支持 Firebase
- ionic-framework - 嗨,我尝试通过单击提交按钮从 Ionic 连接 nats,但它没有连接