Он использует другую функцию, которая здесь не опубликована. Обратите внимание, что опубликованный код будет принимать состояние и действие и возвращать обновленное состояние. Это должно выглядеть знакомо. Часть, которую вы пропустили, вероятно, выглядит примерно так:
export default function createReducer(initialState, handlers) { return (state = initialState, action) => { if (has(handlers, action.type)) { return handlers[action.type](state, action); } return state; }; }
(Используя функцию has
из lodash)
Эта функция выполняет работу, выполняемую другими операторами switch, вызывая определенный обработчик, если он соответствует заданному действию. Затем вы определяете свое начальное состояние и свои обработчики:
const handlers = { [ACTIONS.SOME_ACTION]: handlerFunction, [ACTIONS.SOME_OTHER_ACTION]: anotherHandlerFunction, }; const initialState = { someProp: [], someOtherProp: null, yetAnotherProp: false, };
Мне очень нравится этот шаблон, и я использую его постоянно. Вы избегаете подверженного ошибкам списка операторов switch
, и я думаю, что его легче читать и рассуждать. Итак, в исходном сообщении:
[user.setUser]: (state, action) => { return { ...initialState, _status: status.FETCHED, userID: action.payload.result, } },
user.setUser
– это действие, определенное сразу под фрагментом, на который указывает ссылка (аналогично [ACTION.SOME_ACTION]
выше). Для этого действия он определяет встроенную функцию-обработчик, где мой пример ссылается на handlerFunction
. Вот и все, что было красиво завершено чем-то похожим на createReducer
выше.
Надеюсь, это поможет! Это сильно отличается от шаблона оператора switch
в официальной документации Redux, но мне он очень нравится.