Angular @NGRX中三个点的含义是什么

时间:2017-09-15 08:47:47

标签: angular ngrx

究竟是什么意思是这三个点以及为什么我需要它们?

export function leadReducer(state: Lead[]= [], action: Action {
    switch(action.type){
        case ADD_LEAD:
            return [...state, action.payload];
        case REMOVE_LEAD:
            return state.filter(lead => lead.id !== action.payload.id )
}
}

3 个答案:

答案 0 :(得分:28)

这三个点被称为来自Typescript的spread operator(也来自ES7)。

spread运算符返回数组的所有元素。就像你将分别编写每个元素一样:

let myArr = [1, 2, 3];
return [1, 2, 3];
//is the same as:
return [...myArr];

这主要是语法糖,因为它汇编了这个:

func(...args);

到此:

func.apply(null, args);

在你的情况下,这会被编译为:

return [...state, action.payload];
//gets compiled to this:
return state.concat([action.payload]);

答案 1 :(得分:12)

这是一个扩展运算符(...),用于扩展数组/对象的元素或初始化另一个数组或对象中的数组或对象

让我们从现有数组中创建一个新数组以了解这一点。

let Array1 = [1,2,3]; // 1,2,3

让Array2 = [4,5,6]; // 4,5,6

//从现有阵列创建新阵列

let copyArray = [... Array1]; // 1,2,3

//通过合并两个数组来创建数组

let mergedArray = [... Array1,... Array2]; // 1,2,3,4,5,6

//根据现有数组和更多元素创建新数组

let newArray = [... Array1,7,8]; // 1,2,3,7,8

答案 2 :(得分:2)

...spread operator)的工作方式是将每个值从索引0返回到索引length-1