从地图返回的React对象传播(ES6)

时间:2016-07-06 16:25:17

标签: reactjs ecmascript-6

为什么这样做:

return elements.map((e)=> {return Object.assign({}, e, {selected:true})});

但这并不是:

return elements.map((e)=> {...e, {selected: true}});

ES6 / Babel / React的新手,怜悯。

更新: 转移到此(如建议):

return elements.map(e => ({...e, selected: true }));

获取此错误: unexpected token

虽然传播在项目的其他地方工作:

        return [
            ...state,
            element(undefined, action)
        ]

2 个答案:

答案 0 :(得分:13)

箭头函数中对象的隐式返回应该包含在parens中,以便解释器知道它不是块。

所以return elements.map(e => ({...e, selected: true }));

还修复了selected属性的语法,它不应该像azium指出的那样用括号括起来。

请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions

您的意外令牌错误可能是由于babel不支持建议的object spread。数组传播是es6。使用下面的答案中的插件将解决此问题。包含对象传播的首选方法是babel阶段0,因为您还可以获得其他很酷的功能,例如::绑定运算符。对象传播是第2阶段,因此如果您不想包含第1阶段和第0阶段,也可以使用它。

https://babeljs.io/docs/plugins/preset-stage-0/

答案 1 :(得分:0)

开箱即用的Babel不支持ES7规范中的Object rest spread变换。你需要使用一个插件。

安装此插件:

npm i babel-plugin-transform-object-rest-spread --save-dev

然后,将其添加到.babelrc

{
  "plugins": ["transform-object-rest-spread"]
}

更多信息here