鍍金池/ 問答/HTML/ redux和es6的相關(guān)疑問

redux和es6的相關(guān)疑問

let patentListDefault={
    list:[],
    count:0,
    isLoading: false,
}
export const patentDatas = (state=patentListDefault, action = {}) => {
    let imuDataList;
    let imuItem;
    switch(action.type){
        case 'SAVEPATENTLIST':
            if(action.pageNo!=1){
                action.list=[...state.list,...action.list]
            }
            return {...state, ...action};
        default:
            return state;
    }
}

其中,return {...state, ...action};是什么意思,一個對象里面兩個拓展運算符,再用逗號連接,是什么用法。

回答
編輯回答
傲寒

你可以理解成把stateaction都結(jié)構(gòu)到一個新對象里,實現(xiàn)了對象合并的功能,注意是淺拷貝,不得不說這個特性超好用

2017年5月16日 10:49
編輯回答
刮刮樂

看了這個例子,應(yīng)該就明白了

var a = {name: 'a', age: '3'};
var b = {skill: 'swim'};
var c = {...a, ...b};
console.log(c);
// {name: "a", age: "3", skill: "swim"}
2017年11月24日 10:53
編輯回答
寫榮

首先要說的是return {...state, ...action};不是什么解構(gòu)哦。

這個叫做Spread syntax。 他有非常多的用法!

先來一個數(shù)組的例子:

function sum(x, y, z) {
  return x + y + z;
}

const numbers = [1, 2, 3];

console.log(sum(...numbers));
// expected output: 6

console.log(sum.apply(null, numbers));
// expected output: 6

再來一個對象例子:

var obj1 = { foo: 'bar', x: 42 };
var obj2 = { foo: 'baz', y: 13 };
const merge = ( ...objects ) => ( { ...objects } );

var mergedObj = merge ( obj1, obj2);
// Object { 0: { foo: 'bar', x: 42 }, 1: { foo: 'baz', y: 13 } }

var mergedObj = merge ( {}, obj1, obj2);
// Object { 0: {}, 1: { foo: 'bar', x: 42 }, 2: { foo: 'baz', y: 13 } }

你講的這個其實就是這個對象的例子。

如果還是不明白, 你可以把它看成是Object.assign({}, state, action);

2017年6月22日 04:47