究竟是什么意思是这三个点以及为什么我需要它们?
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 )
}
}
答案 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
: