The three dots are known as the spread operator from Typescript (also from ES7).
The spread operator return all elements of an array. Like you would write each element separately:
let myArr = [1, 2, 3];
return [1, 2, 3];
//is the same as:
return [...myArr];
This is mostly just syntactic sugar as it compiles this:
func(...args);
to this:
func.apply(null, args);
In your case this gets compiled to this:
return [...state, action.payload];
//gets compiled to this:
return state.concat([action.payload]);