javascript - 如何使用 ES6 ... 表示法?

标签 javascript reactjs ecmascript-6 redux

我对 React 和 es6 语法还很陌生。我正在为我的 React Web 应用程序使用 redux,并且在我的 reducer 中我希望能够将字符串推送到我的 state.likes

这是我的代码:

const i = action.index;
console.log(state);
return [
    ...state.slice(0, i), // before the one we are updating
    {...state[i], likes: state[i].likes+1}, //i want to change this bit so I can push deviceKey
    ...state.slice(i+1), //after one we are updating
  ]

当我 console.log(state) 时,我的数组中有两个对象,如下所示:

[
{
  "code": "AAAAAAA",
  "caption": "blah blah blah",
  "likes": [
    "ABCDEFG",
    "BACDEFG"
  ],
  "id": "1234567890",
  "display_src": "https://pbs.twimg.com/profile_images/1044686525/Get_Some.jpg"
},
{
  "code": "BBBBBBB",
  "caption": "nah fam",
  "likes": [
    "ABCDEFG",
    "BACDEFG",
    "CBADEFG"
  ],
  "id": "0987654321",
  "display_src": 'http://got-crossfit.com/wp-content/uploads/2014/04/get-some-rest.jpg'
}
]

现在,每当这个 reducer 触发时,我如何将 action.deviceKey 推送到 state[i].likes 中?我尝试了 {...state[i], likes: state[i].likes.push(action.deviceKey)},但没有成功。

有人可以 eli5 ... 符号的作用吗?我还是不太明白这有什么意义。

谢谢!

最佳答案

实际上有三种不同的方式 ...可以使用。从技术上讲,只有其中之一是有效的官方 Javascript,但其他两个非常常见。

所有这些都用于制作对象和数组的“浅拷贝”。浅拷贝是指您创建一个新对象或数组,但其中包含与原始对象或数组完全相同的项目/数据/引用。

首先,...可以用作“数组扩展”运算符,以制作数组的浅拷贝。这是迄今为止唯一属于实际 Javascript 规范一部分的形式。与 Array.slice() 基本相同.

第二,...可以在 JSX 语法中使用(由 React 引入,也被其他类似的 View 库使用)。它制作对象的浅拷贝。

最后,官方建议使用...作为“对象传播”运算符,可以在 Javascript 代码中的任何位置(而不仅仅是在 JSX 中)制作对象的浅拷贝。该提案尚未最终确定,但许多人正在使用它,通过包含 Babel 插件将其编译为等效的 Object.assign()函数调用。

对于您的具体问题,我认为您需要使用Array.concat()函数,它返回包含新项目的新数组引用,而不是 Array.push()函数,它将项目插入到现有数组中。

关于javascript - 如何使用 ES6 ... 表示法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37890186/

相关文章:

javascript - Function.prototype.toString() 并不总是返回有效的 JS。为什么?

javascript - JSTL 和 Javascript

javascript - Discord.JS V13 client.on messagecreate 未触发

javascript - 如何禁用 meteor 帐户用户注册?

javascript - axios Post请求没有React功能

html - 如何在 React 中水平对齐卡片元素(rmwc)?

javascript - ES6 中的导出类不起作用

javascript - Ajax 调用页面同时显示成功和错误消息

javascript - 使用 Rollup 而不是一个庞大的 index.js 文件导出单个组件?

javascript - 将 html 事件绑定(bind)到 es6 模块