You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
- Redux Toolkit: слайсы, генерация actions и reducers
22
27
23
-
<!--s-->
28
+
<!--v-->
24
29
25
30
## Результат
26
31
27
-
Мини-приложение, применяющие управление состояниемс использованием Redux Toolkit: создание слайса, actions и reducer'а
32
+
Мини‑приложение с централизованным состоянием: определены `state`, `actions`, `reducers`, настроен `store`; реализованы ключевые сценарии с использованием Redux Toolkit (создание слайса, actions и reducer'а)
28
33
29
-
<!--s-->
34
+
<!--v-->
30
35
31
36
## Компетенции по занятию
32
37
33
38
- Использование React JS
34
-
- Использовать Redux Toolkit
39
+
- Проектирование и управление состоянием приложения
40
+
- Применение Redux/Redux Toolkit на практике
41
+
- Понимание middleware и композиции редьюсеров (`combineReducers`)
42
+
43
+
<!-- s -->
44
+
45
+
## Введение и мотивация
46
+
47
+
### OTUS
48
+
49
+
## Javascript Basic
50
+
51
+
<!-- v -->
52
+
53
+
## Вопросы?
54
+
55
+
<!-- v -->
56
+
57
+
Какую задачу решает паттерн `Наблюдатель`?
58
+
59
+
<!-- v -->
60
+
61
+
Какое API у `EventEmitter` интерфейса?
62
+
63
+
<!-- v -->
64
+
65
+
Какую задачу решает паттерн `Посредник` ?
66
+
67
+
<!-- v -->
68
+
69
+
Чем `EventBus` отличается от `EventTarget` ?
70
+
71
+
<!-- s -->
72
+
73
+
### Управление состоянием приложения, разработка redux
74
+
75
+
<!-- s -->
76
+
77
+
### Сначала разберемся с задачей
78
+
79
+
<!-- v -->
80
+
81
+
**Состояние приложения** - набор всех переменных/параметров/свойств, которые определяют внешний вид и поведение приложения в каждый конкретный момент времени.
82
+
83
+
Например:
84
+
85
+
- какая страница сейчас открыта
86
+
- какой элемент сейчас активен
87
+
- что пользователь ввел в поле поиска
88
+
89
+
<!-- v -->
90
+
91
+
На уровне кода `состояние` - это совокупность переменных и свойств объектов.
92
+
93
+
<!-- v -->
94
+
95
+
Где находится состояние в системе, построенной на основе `EventBus` ?
В такой системе состояние оказывается `размазанным` по модулям. Это подходит для приложений, которые являются набором независимых блоков. Но при этом отображение одного модуля, не может использовать данные из другого модуля (т.к. модули друг о друге не знают).
102
+
103
+
<!-- v -->
104
+
105
+
Поэтому появилась идея "централизованного хранилища" - единого объекта, который хранит в себе все состояние приложения, и обладает всей информацией, которая влияет на приложение.
106
+
107
+
<!-- v -->
108
+
109
+
Самым базовым вариантом реализации является использование глобального объекта и глобальных переменных, которые доступны в любой части приложения.
110
+
111
+
<!-- v -->
112
+
113
+
Проблема с таким подходом:
114
+
115
+
- кто угодно может вносить неконтролируемые изменения
116
+
- сложно отследить факт изменения переменных состояния (вспоминаем про обновление представления)
Redux пытается сделать изменения состояния предсказуемыми, путем введения некоторых ограничений на то, как и когда могут произойти обновления. Эти ограничения отражены в трех принципах Redux.
Предоставляют стороннюю точку расширения, между отправкой экшена и моментом, когда этот экшен достигает редьюсера. Люди используют Redux-мидлвары для логирования, сообщения об ошибках, общения с асинхронным API, роутинга и т.д.
269
+
270
+
<!-- v -->
271
+
272
+
<imgsrc="./images/middlewares.gif"title="Middlewares и поток данных в Redux" />
Превращает объект, значения которого являются разными функциями-reducer, в единую функцию reducer. Он будет вызывать каждый дочерний reducer и собирать их результаты
324
+
в единый объект состояния, ключи которого соответствуют ключам переданных дочерних reducer.
0 commit comments