redux-course-ru
  • Вступление
  • Подготовка
    • Создание package.json
    • Первые шаги
    • ES2015, React HMR
    • ESLint
    • Установка зависимостей на автомате
    • React dev tools
  • Создание
    • Основы Redux (теория)
    • Точка входа
    • Настройка Store
    • Создание Reducer
    • Присоединение данных (connect)
    • Комбинирование редьюсеров
    • Контейнеры и компоненты
    • Создание actions
    • Константы
    • Наводим порядок
    • Middleware (усилители). Логгер
    • Асинхронные actions
    • Взаимодействуем с VK
  • Заключение
Powered by GitBook
On this page

Was this helpful?

  1. Создание

Настройка Store

PreviousТочка входаNextСоздание Reducer

Last updated 5 years ago

Was this helpful?

ОБНОВЛЕНИЕ 2018: Вышло (современный код и версии пакетов, данное издание УСТАРЕЛО)

На так же проводятся бесплатные вебинары, публикуются переводы и авторские материалы, !

Настройка Store

Для начала, повторим то, что нам уже известно про store, и быть может добавим чуть-чуть нового. Итак:

Store хранит состояние приложения. Единственный путь изменить store - это отправить действие (dispatch action).

Store - это не класс. Это обычный объект с несколькими методами, а именно:

  • getState()

  • dispatch(action)

  • subscribe(listener)

  • replaceReducer(nextReducer)

Создадим функцию конфигурации store

store/configureStore.js

import { createStore, applyMiddleware } from 'redux'
import rootReducer from '../reducers'

export default function configureStore(initialState) {
  const store = createStore(rootReducer, initialState)
  return store
}

В Redux версии 2.x.x мы должны явно указать, что reducers поддерживают hot reload. Сделать это достаточно просто. Если взглянуть в начало кода, видно, что мы импортируем так называемый корневой редьюсер (rootReducer), который по сути и отражает все состояние нашего приложения. Теперь посмотрим еще выше по туториалу - ага, у store есть подходящая функция - replaceReducer

store/configureStore.js

import { createStore } from 'redux'
import rootReducer from '../reducers'

export default function configureStore(initialState) {
  const store = createStore(rootReducer, initialState)

  if (module.hot) {
    module.hot.accept('../reducers', () => {
      const nextRootReducer = require('../reducers')
      store.replaceReducer(nextRootReducer)
    })
  }

  return store
}

Ничего необычного, строго по : передаем rootReducer в только что импортированную функцию createStore.

Теперь взяв за основу , мы знаем, что hot reload ожидает от нас функции accept. Вуаля, пора вносить правки.

К сожалению, до сих пор не работает. Webpack ругается на отсутствующий reducer. Давайте исправим это, и я обещаю, наконец-то можно будет посмотреть на результат в браузере.

второе издание
канале
присоединяйтесь
документации
отличный видео скринкаст про Webpack
наш код