2016-10-14 80 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的更多信息也可以在这里找到。

希望这会有所帮助!