Как я могу реорганизовать этот код редуктора с помощью ES6? Concat я могу заменить на ..., верно? А как насчет Object.assign?
import { FETCH_REQUEST, FETCH_SUCCESS, FETCH_FAILURE } from '../actions';
const initialState = {
isFetching: false,
beersArray: [],
errorMessage: '',
skip: 0,
limit: 0,
hasMore: true,
};
export default function(state = initialState, action) {
switch (action.type) {
case FETCH_REQUEST:
return Object.assign({}, state, {
isFetching: true,
skip: action.skip,
limit: action.limit,
hasMore: true,
});
case FETCH_SUCCESS:
return Object.assign({}, state, {
isFetching: false,
beersArray: state.beersArray.concat(action.beers),
hasMore: action.hasMore,
});
case FETCH_FAILURE:
return Object.assign({}, state, {
isFetching: false,
errorMessage: action.errorMessage,
hasMore: false,
});
default:
return state;
}
}



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете заменить Object.assign на. Имейте в виду, что ...state (свойства распространения) являются предложением, поэтому ваша среда должна их поддерживать.
return { ...state, isFetching: true, skip: action.skip, limit: action.limit, hasMore: true };
Насчет concat можно написать
{ beersArray: [...state.beersArray, ...action.beers] }
Это просто уничтожит элементы из state.beersArray и action.beers, поместит их в новый массив и назначит beersArray.
Вы можете использовать оператор Spread для объектов key-value и arrays.
export default function(state = initialState, action) {
switch (action.type) {
case FETCH_REQUEST:
return {...state, { isFetching: true, skip: action.skip, limit: action.limit, hasMore: true}};
case FETCH_SUCCESS:
return {...state, { isFetching: false, beersArray: [...state.beersArray, ...action.beers], hasMore: action.hasMore });
case FETCH_FAILURE:
return { ...state, { isFetching: false, errorMessage: action.errorMessage, hasMore: false });
default:
return state;
}
}
state.beersArray.concat(action.beers) в [...state.beersArray, ...action.beers]
Object.assign({}, state, {other props}} в { ...state, ...state, ...{other props} }
Spread syntax (...)
Spread syntaxallows an iterable such as an array expression or string to be expanded in places where zero or more arguments (for function calls) or elements (for array literals) are expected, or an object expression to be expanded in places where zero or more key-value pairs (for object literals) are expected.