2016-10-14 130 views
-5

我正在嘗試重新創建redux購物車示例。但是我發現很難理解下面這行代碼,因爲我對ES6的東西很陌生。什麼「[productId] :(狀態[productId] || 0)+ 1」是什麼意思?

[productId]: (state[productId] || 0) + 1

+0

key是變量productId的值,如果state [productId]是falsey,則值爲(state [productId]或0)+ 1 –

+0

我的玻璃球告訴我你應該看看[計算屬性名稱](https:// developer .mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Object_initializer#Computed_property_names)和[邏輯運算符](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_Operators)... – ASDFGerte

+0

'玻璃球' - 保持良好的工作,並最終你將能夠買得起一個水晶之一:P –

回答

1

好了,再次讀取該文件。這裏是創建intialState

const initialState = { 
    addedIds: [], 
    quantityById: {} 
} 

現在是quantityById功能。它通過initialState.quantityById作爲state

const quantityById = (state = initialState.quantityById, action) => { 

以下行使用spread operator構造要返回的對象。

 return { ...state, 
     [productId]: (state[productId] || 0) + 1 
     } 

{ ...state手段拿的東西從state變量,這將意味着所有的屬性將在新的對象。然後[productId]: (state[productId] || 0) + 1將通過state對象state[productId]0設置的[productId]值的值,如果這個ID是不是state對象,並添加1它。

總的來說,如果這條線沒有通過state對象或從state複製對象後更新[productId]對象。

關於spread operator的更多信息也可以在這裏找到。

希望這會有所幫助!