99 lines
5.8 KiB
Markdown
99 lines
5.8 KiB
Markdown
---
|
||
title: Redux
|
||
localeTitle: Redux
|
||
---
|
||
## Redux
|
||
|
||
Redux является предсказуемым контейнером состояний для приложений JavaScript.
|
||
|
||
Это помогает вам писать приложения, которые ведут себя последовательно, работать в разных средах (клиент, сервер и родной), и их легко тестировать. Кроме того, он предоставляет отличные возможности для разработчиков, такие как редактирование живого кода в сочетании с отладчиком времени.
|
||
|
||
Основные принципы Redux:
|
||
|
||
1. Redux - это контейнер состояния, он хранит все ваше состояние в одном месте
|
||
2. Состояние доступно только для чтения, единственный способ изменить состояние - отправить действие.
|
||
3. Государство может быть изменено только чистыми функциями или в другом терминах: Редукторы. Редукторы Redux принимают в предыдущем состоянии и объект действия и возвращают следующее состояние.
|
||
|
||
С практической точки зрения, как мы используем Redux точно?
|
||
|
||
### ПРАВИЛО 1
|
||
|
||
#### Где хранится это состояние? Redux предоставляет вам удобную функцию, называемую
|
||
|
||
```js
|
||
createStore()
|
||
```
|
||
|
||
Где вы создаете хранилище, в котором будет сохранено ваше состояние.
|
||
|
||
### ПРАВИЛО 3 (я собираюсь сначала показать правило 3, так как это будет иметь больше смысла)
|
||
|
||
#### Состояние может быть изменено только с помощью чистой функции, например, редуктора, поэтому для создания этой связи мы перейдем к нашему редуктору к createStore ()
|
||
|
||
```js
|
||
var store = createStore(reducer)
|
||
```
|
||
|
||
Это становится более сложным, когда у вас больше редукторов, но в основе, в магазине теперь есть редуктор, прикрепленный к нему
|
||
|
||
### ПРАВИЛО 2
|
||
|
||
#### Как только у нас есть магазин, созданный с помощью store = createStore (редуктор). Новый магазин, который мы создали, имеет метод, называемый диспетчером. Помните, что в правиле 2 единственный способ изменить состояние - это отправить действие!
|
||
|
||
Вы можете видеть, где это происходит.
|
||
|
||
```js
|
||
store.dispatch(action)
|
||
```
|
||
|
||
Прежде чем я перейду к тому, что редуктор и какое-то действие, я думаю, показывая вам очень простую и ограниченную реализацию createStore () Redux.
|
||
|
||
```js
|
||
createStore = (reducer) => {
|
||
let state;
|
||
//dispatch method
|
||
dispatch = (action) => {
|
||
state = reducer(state, action)
|
||
}
|
||
return {dispatch}
|
||
}
|
||
```
|
||
|
||
Посмотрите, как мы прошли редуктор в createStore, и он устанавливается в нашем методе отправки; и когда мы вызываем метод отправки, он принимает действие, и он устанавливает новое состояние, основанное на возврате редуктора.
|
||
|
||
## Что такое редуктор? Что такое действие?
|
||
|
||
Действие на самом базовом уровне - это объект, который имеет свойство, называемое типом. Он также может иметь другие свойства, но для простоты он будет иметь только тип.
|
||
|
||
```js
|
||
var someAction = {type:'doSomething'}
|
||
```
|
||
|
||
Редуктор - это просто функция:
|
||
|
||
```js
|
||
var reducer = (state, action) => {
|
||
|
||
if (action.type === 'doSomething'){
|
||
return changedState;
|
||
} else if ( action.type === 'doSomethingElse'){
|
||
return changedState;
|
||
} else {
|
||
return state
|
||
}
|
||
}
|
||
```
|
||
|
||
Действие, которое мы передаем в редуктор, определит, как изменяется состояние в зависимости от типа. Redux становится более сложным, но если вы поймете эти принципы, вам будет легче перемещаться по проектам react-redux!
|
||
|
||
#### Дополнительная информация:
|
||
|
||
##### Вам действительно нужен Redux?
|
||
|
||
[Дэн Абрамов](https://github.com/gaearon) , создатель Redux, написал некоторое время назад замечательную статью « [Вам не понадобится Redux»](https://medium.com/@dan_abramov/you-might-not-need-redux-be46360cf367) . Сначала вы должны проверить это, потому что, может быть, вам это не понадобится.
|
||
|
||
Для получения дополнительной информации перейдите по [адресу http://redux.js.org/](http://redux.js.org/)
|
||
|
||
### Ресурсы
|
||
|
||
* [Курс от Дана Абрамова, автора Редукса.](https://egghead.io/courses/getting-started-with-redux) |