# Настройка Store

*ОБНОВЛЕНИЕ 2018: Вышло* [*второе издание*](https://maxfarseer.gitbooks.io/redux-course-ru-v2/content/) *(современный код и версии пакетов, данное издание УСТАРЕЛО)*

*На* [*канале*](http://bit.ly/2IqH74P) *так же проводятся бесплатные вебинары, публикуются переводы и авторские материалы,* [*присоединяйтесь*](http://bit.ly/2IqH74P)*!*

## Настройка Store

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

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

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

* `getState()`
* `dispatch(action)`
* `subscribe(listener)`
* `replaceReducer(nextReducer)`

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

*store/configureStore.js*

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

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

Ничего необычного, строго по [документации](http://redux.js.org/docs/api/createStore.html): передаем *rootReducer* в только что импортированную функцию *createStore*.

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

Теперь взяв за основу [отличный видео скринкаст про Webpack](https://www.youtube.com/watch?v=EQhXtTOxpVk), мы знаем, что hot reload ожидает от нас функции accept. Вуаля, пора вносить правки.

*store/configureStore.js*

```javascript
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
}
```

К сожалению, [наш код](https://github.com/maxfarseer/redux-ru-tutorial/tree/configure_store) до сих пор не работает. Webpack ругается на отсутствующий reducer. Давайте исправим это, и я обещаю, наконец-то можно будет посмотреть на результат в браузере.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://max-frontend.gitbook.io/redux-course-ru/struktura_prilozheniya/sozdanie_store.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
