2016-12-23 101 views
-1

我想了解React & Redux更好。最近我已经使用这里的例子:https://github.com/reactjs/redux/blob/master/examples/shopping-cart/src/reducers/products.js
我有困难把持这些行: ... action.products.reduce((OBJ,产品)=> { OBJ [product.id] =产品 返回物镜 },{})无法理解React语法

和的[ProductID]:产品(州的[ProductID],动作)

有人能解释发生了什么吗?

const byId = (state = {}, action) => { 
    switch (action.type) { 
    case RECEIVE_PRODUCTS: 
     return { 
     ...state, 
     ...action.products.reduce((obj, product) => { 
      obj[product.id] = product 
      return obj 
     }, {}) 
     } 
    default: 
     const { productId } = action 
     if (productId) { 
     return { 
      ...state, 
      [productId]: products(state[productId], action) 
     } 
     } 
     return state 
    } 

回答

0

你的问题是评价人不清楚,但我会尽力回答我的最佳能力。 ...(三个点)被称为spread operator,它是将对象(或数组)合并到另一个对象(或数组)中的一种方法。这里有一个例子:

const objA = { 
    field_1: "my value", 
    field_2: "my other value" 
}; 
const newObject = { 
    ...objA, 
    field_3: "my third value" 
}; 
console.log(newObject); // { 
         // field_1: "my value", 
         // field_2: "my other value", 
         // field_3: "my third value" 
         // } 

这基本上等同于以下内容:

const objA = { 
    field_1: "my value", 
    field_2: "my other value" 
}; 
const newObject = Object.assign({}, objA, { field_3: "my third value" }); 

还有很多更给它比我的例子,所以请参考相关文档。

[productId]: products(state[productId], action)是一种使用变量作为对象键的方法。这大致相当于:

let objA = { 
    field_1: "my value", 
}; 
const myKey = "field_2"; 
objA[myKey] = "my other value"; 

从技术上讲,它不是React语法,而是评估者ES6-7语法。

+0

猜猜我需要开始学习ES6。 Thankyou Nikolaj。 – olafsadventures