2016-07-06 66 views
1

返回這是爲什麼工作:陣營對象傳播(ES6)從地圖

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

但這並不:

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

ES6/Babel/React的新手,有憐憫。

UPDATE: 移動到這個(的建議)之後:

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

得到這個錯誤: unexpected token

雖然價差在項目工作在別處:

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

爲什麼沒有'return'第二樣品中? – Xufox

+1

傳播陣列是一個ES6功能,但傳播對象是一個實驗性的建議功能,所以你必須在Babel中啓用它。 – loganfsmyth

回答

10

從箭頭函數隱含返回一個對象應該被包裝在parens中,這樣解釋器就知道它不是a塊。

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

另外固定所選屬性的語法,它不應該被在括號包裝爲azium指出。

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

你意外的標記錯誤可能是由於巴貝爾不支持所提出的object spread。數組傳播是es6。在下面的答案中使用插件將解決此問題。包含對象傳播的首選方法是使用babel階段0,因爲您還可以獲得其他很酷的功能,如綁定操作符::。對象價差爲第2階段,所以你也可以使用,如果你不想包含階段1和0

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

+0

出於某種原因獲取意外標記(圖片附在原始問題上)。 – Guy

+0

@Andy_D:這是一個建議,它是**不是** ES7的一部分。 –

+0

@FelixKling好點。編輯答案。 –

0

的其餘對象從ES7規範價差變換不支持巴別出盒子。你需要使用一個插件。

要安裝這個插件:

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

然後,將它添加到您的.babelrc

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

更多信息here

+0

對象傳播不是ES7的一部分(http://www.ecma-international.org/ecma-262/7.0/)。這是一個建議。 –