При создании редукторов цель состоит не в том, чтобы вернуть ошибку вместо нашего нового состояния, а в том, чтобы вернуть существующее состояние, если нового состояния нет.
const hiringProcess = (oldListOfCandidates, action) => {
if (action.type === 'CREATE_CANDIDATE') {
// we care about this action
return [...oldListOfCandidates, action.payload];
}
// we don't care about this action
}
Итак, с синтаксисом ES2015 я взял массив oldListOfCandidates
и добавил их в новый массив, а затем добавил новую запись action.payload
.
В любом случае, ваш вопрос не о синтаксисе интерполяции клавиш, а о том, почему return state;
вместо того, чтобы выдавать ошибку.
Мы не заботимся о том, чтобы вернуть ошибку, для целей редукторов и того, что должна делать для нас общая архитектура редуксов, что мы хотим вернуть, это существующие данные или state
, если у нас нет новые данные, вот и весь смысл этих редукторов.
const hiringProcess = (oldListOfCandidates, action) => {
if (action.type === 'CREATE_CANDIDATE') {
// we care about this action
return [...oldListOfCandidates, action.payload];
}
// we don't care about this action
return oldListOfCandidates;
}
Так что, если нет нового кандидата для добавления в state
, тогда нам не нужна или не нужна ошибка, объясняющая, почему не обновили state
, мы просто хотим return state;
, который у нас уже есть.
И, как вы уже знаете, при первом вызове редуктора он получит значение undefined, и нам нужно значение по умолчанию для первого аргумента для state
только так:
const hiringProcess = (oldListOfCandidates = [], action) => {
if (action.type === 'CREATE_CANDIDATE') {
// we care about this action
return [...oldListOfCandidates, action.payload];
}
// we don't care about this action
return oldListOfCandidates;
}
Я говорю за state
только потому, что я выполнил работу в магазинах, где они установили значение объекта action
по умолчанию и не могли объяснить мне, почему они это сделали, и в то же время не удосужились его исправить. так что не делайте этого, это не обязательно.