Eu já visitei o 
repositório da biblioteca 
redux , mas de algum lugar tive a ideia de aprofundar sua implementação. Gostaria de compartilhar minha descoberta chocante ou até decepcionante com a comunidade.
TL; DR: A lógica de redux principal se encaixa em 7 linhas de código JS.
Sobre redux em poucas palavras (tradução gratuita do cabeçalho no github):
Redux é uma biblioteca de gerenciamento de estado para aplicativos JavaScript.
Ajuda a escrever aplicativos que se comportam de maneira estável / previsível, trabalham em diferentes ambientes (cliente / servidor / código nativo) e são facilmente testados.
Clonei o repositório redux , abri a pasta de origem no editor (ignorando 
documentos , 
exemplos etc.) e 
peguei a tecla Delete com a 
tesoura :
- Todos os comentários do código foram removidos
 Cada método de biblioteca é documentado usando JSDoc em grandes detalhes.
 
- Validação de erro e registro removidos
 Em cada método, os parâmetros de entrada são rigorosamente controlados com a saída de comentários detalhados muito bons para o console
 
- Removidos os métodos bindActionCreators , subscrever , replaceReducer e observable .
 
 ... porque ele poderia. Bem, ou porque eu estava com preguiça de escrever exemplos para eles. Mas sem casos de canto, eles são ainda menos interessantes do que o que está por vir.
 
Agora vamos dar uma olhada no que resta
Escrevendo redux em 7 linhas
Toda a funcionalidade básica do redux se encaixa em um arquivo minúsculo, para o qual quase ninguém criará um repositório no github :)
function createStore(reducer, initialState) {
    let state = initialState
    return {
        dispatch: action => { state = reducer(state, action) },
        getState: () => state,
    }
}
. , , 
.
redux. 18 HeadHunter «redux» — , , 7 . — .
7 TodoApp. . 
TodoApp redux.
function todosReducer(state, action) {
  switch (action.type) {
    case 'ADD_TODO':
      return [
        ...state,
        {
          id: action.id,
          text: action.text,
          completed: false
        }
      ]
    case 'TOGGLE_TODO':
      return state.map(todo => {
        if (todo.id === action.id) {
          return { ...todo, completed: !todo.completed }
        }
        return todo
      })
    default:
      return state
  }
}
const initialTodos = []
const store = createStore(todosReducer, initialTodos)
store.dispatch({
  type: 'ADD_TODO',
  id: 1,
  text: '  redux '
})
store.getState() 
store.dispatch({
  type: 'TOGGLE_TODO',
  id: 1
})
store.getState() 
, 
show must go on.
, .
combineReducers
, , reducer , .
:
function counterReducer(state, action) {
  if (action.type === 'ADD') {
    return state + 1
  } else {
    return state
  }
}
const reducer = combineReducers({
  todoState: todoReducer,
  counterState: counterReducer
})
const initialState = {
  todoState: [],
  counterState: 0,
}
const store = createStore(reducer, initialState)
store , .
TodoApp .
ES6 (7/8/∞):
const reducer = combineReducers({ todos, counter })
todoReducer todos counterReducer counter. . , , redux, , 
(state.todos) , 
(function todos(){}).
micro-redux, :
function reducer(state, action) {
  return {
    todoState: todoReducer(state, action),
    counterState: counterReducer(state, action),
  }
}
. 2 «-», 
(state, action), 
, ?, Object.entries 
combineReducers (, ) 
:
function combineReducers(reducersMap) {
  return function combinationReducer(state, action) {
    const nextState = {}
    Object.entries(reducersMap).forEach(([key, reducer]) => {
      nextState[key] = reducer(state[key], action)
    })
    return nextState
  }
}
redux 9 .
, , .
applyMiddleware
middleware redux — - , dispatch 
-. , , ,… — 
-.
middleware createStore, , :
const createStoreWithMiddleware = applyMiddleware(someMiddleware)(createStore)
const store = createStoreWithMiddleware(reducer, initialState)
applyMiddleware, 10 , : createStore «dispatch». dispatch, ( ) , — , (newState = reducer(state, action)).
applyMiddleware 
dispatch, ( ) - .
, , middleware redux — 
redux-thunk,
store.dispatch({type: 'SOME_ACTION_TYPE', some_useful_data: 1 })
store.dispatch
function someStrangeAction() {
  return async function(dispatch, getState) {
    if(getState().counterState % 2) {
       dispatch({
         type: 'ADD',
       })
    }
    await new Promise(resolve => setTimeout(resolve, 1000))
    dispatch({
      type: 'TOGGLE_TODO',
      id: 1
    })
  }
}
,
dispatch(someStrangeAction())
:
- store.getState().counterState 2, 1
- , todo id=1 completed true false .
, redux-thunk, redux — , ,
:
const thunk = store => dispatch => action => {
  if (typeof action === 'function') {
    return action(store.dispatch, store.getState)
  }
  return dispatch(action)
}
,
const thunk = store => dispatch => action
, , , , , (, , )
, 
createStorefunction createStore(reducer, initialState) {
    let state = initialState
    return {
        dispatch: action => { state = reducer(state, action) },
        getState: () => state,
    }
}
(reducer, initialState) { dispatch, getState }.
, 
applyMiddleware , , .
createStore :
function applyMiddleware(middleware) {
  return function createStoreWithMiddleware(createStore) {
    return (reducer, state) => {
      const store = createStore(reducer, state)
      return {
        dispatch: action => middleware(store)(store.dispatch)(action),
        getState: store.getState,
      }
    }
  }
}
redux . « , ». , 1 — .
P.S.
«micro-redux» store.subscribe 8 . ?