redux angular · 2018-08-18 · Максим Иванов frontend developer, Синимекс...

55
Redux + Angular NGRX - NGXS - Akita

Upload: others

Post on 03-Jun-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Redux Angular · 2018-08-18 · Максим Иванов Frontend Developer, Синимекс Founder @Angular-RU на Github @splincode Кирилл Юсупов Frontend Developer,

Redux + Angular NGRX - NGXS - Akita

Page 2: Redux Angular · 2018-08-18 · Максим Иванов Frontend Developer, Синимекс Founder @Angular-RU на Github @splincode Кирилл Юсупов Frontend Developer,

Максим ИвановFrontend Developer, СинимексFounder @Angular-RU на Github@splincode

Кирилл ЮсуповFrontend Developer, Синимекс@kyusupov33

Page 3: Redux Angular · 2018-08-18 · Максим Иванов Frontend Developer, Синимекс Founder @Angular-RU на Github @splincode Кирилл Юсупов Frontend Developer,
Page 4: Redux Angular · 2018-08-18 · Максим Иванов Frontend Developer, Синимекс Founder @Angular-RU на Github @splincode Кирилл Юсупов Frontend Developer,

Для кого мы разрабатываем на Angular

Page 5: Redux Angular · 2018-08-18 · Максим Иванов Frontend Developer, Синимекс Founder @Angular-RU на Github @splincode Кирилл Юсупов Frontend Developer,

Основные вопросы

Немного статистики

Зачем намRedux в Angular?

Существующиереализации

Page 6: Redux Angular · 2018-08-18 · Максим Иванов Frontend Developer, Синимекс Founder @Angular-RU на Github @splincode Кирилл Юсупов Frontend Developer,

Зачем нам Redux в Angular?

Page 7: Redux Angular · 2018-08-18 · Максим Иванов Frontend Developer, Синимекс Founder @Angular-RU на Github @splincode Кирилл Юсупов Frontend Developer,

7

Дерево компонентов

Page 8: Redux Angular · 2018-08-18 · Максим Иванов Frontend Developer, Синимекс Founder @Angular-RU на Github @splincode Кирилл Юсупов Frontend Developer,

Data-binding

One-way Two-wayOne-time

View Model

Первая инициализация в представлении без

последующих изменений

View Model

Изменения в представлении или

модели автоматически обновляют зависимость

View Model

Изменения в представлении никак не

влияют на модель, без обновления

8

Page 9: Redux Angular · 2018-08-18 · Максим Иванов Frontend Developer, Синимекс Founder @Angular-RU на Github @splincode Кирилл Юсупов Frontend Developer,

// React (JSX)

<input value={this.state.data} onChange={this.handleChange} />

// Angular as React-like (one-way)

<input [ngModel]="data" (ngModelChange)="handleChange($event)">

Angular as React-like

9

Page 10: Redux Angular · 2018-08-18 · Максим Иванов Frontend Developer, Синимекс Founder @Angular-RU на Github @splincode Кирилл Юсупов Frontend Developer,

10

Без Redux Redux

Page 11: Redux Angular · 2018-08-18 · Максим Иванов Frontend Developer, Синимекс Founder @Angular-RU на Github @splincode Кирилл Юсупов Frontend Developer,

Концепция Redux

11

Component Action

create action

update state dispatchStore

Reducer

Create new state

Page 12: Redux Angular · 2018-08-18 · Максим Иванов Frontend Developer, Синимекс Founder @Angular-RU на Github @splincode Кирилл Юсупов Frontend Developer,

12

React Fiber(отложенный рендеринг)

https://claudiopro.github.io/react-fiber-vs-stack-demo/fiber.html

Page 13: Redux Angular · 2018-08-18 · Максим Иванов Frontend Developer, Синимекс Founder @Angular-RU на Github @splincode Кирилл Юсупов Frontend Developer,

13

Page 14: Redux Angular · 2018-08-18 · Максим Иванов Frontend Developer, Синимекс Founder @Angular-RU на Github @splincode Кирилл Юсупов Frontend Developer,

DEMO

Page 15: Redux Angular · 2018-08-18 · Максим Иванов Frontend Developer, Синимекс Founder @Angular-RU на Github @splincode Кирилл Юсупов Frontend Developer,

15

Page 16: Redux Angular · 2018-08-18 · Максим Иванов Frontend Developer, Синимекс Founder @Angular-RU на Github @splincode Кирилл Юсупов Frontend Developer,

Концепция Flux

16

Component Action

create action

update state dispatchStore

Page 17: Redux Angular · 2018-08-18 · Максим Иванов Frontend Developer, Синимекс Founder @Angular-RU на Github @splincode Кирилл Юсупов Frontend Developer,

Управление состоянием без регистрации и СМС1. Пишем свой класс Store.ts

который управляет потоком данных RxJS2. Пишем state-сервис, который инициализирует поток из Store.ts3. Инжектим state-сервис в компонентах

17

Page 18: Redux Angular · 2018-08-18 · Максим Иванов Frontend Developer, Синимекс Founder @Angular-RU на Github @splincode Кирилл Юсупов Frontend Developer,

18

1. Пишем свой класс Store.ts

Page 19: Redux Angular · 2018-08-18 · Максим Иванов Frontend Developer, Синимекс Founder @Angular-RU на Github @splincode Кирилл Юсупов Frontend Developer,

19

2. Пишем state-сервис

Page 20: Redux Angular · 2018-08-18 · Максим Иванов Frontend Developer, Синимекс Founder @Angular-RU на Github @splincode Кирилл Юсупов Frontend Developer,

20

3. Инжектим state-сервис в компонентах

getState

Model

setState

Page 21: Redux Angular · 2018-08-18 · Максим Иванов Frontend Developer, Синимекс Founder @Angular-RU на Github @splincode Кирилл Юсупов Frontend Developer,

21

А как же:

- Dev tools?- Logger?- CLI? - Immutable?

Page 22: Redux Angular · 2018-08-18 · Максим Иванов Frontend Developer, Синимекс Founder @Angular-RU на Github @splincode Кирилл Юсупов Frontend Developer,

Существующие реализации паттернаRedux на Angular

Page 23: Redux Angular · 2018-08-18 · Максим Иванов Frontend Developer, Синимекс Founder @Angular-RU на Github @splincode Кирилл Юсупов Frontend Developer,

23

Page 24: Redux Angular · 2018-08-18 · Максим Иванов Frontend Developer, Синимекс Founder @Angular-RU на Github @splincode Кирилл Юсупов Frontend Developer,

Концепция

24

Component

Action

Reducer

dispatch

next Stateemit state

send

Subscribe

Store

Page 25: Redux Angular · 2018-08-18 · Максим Иванов Frontend Developer, Синимекс Founder @Angular-RU на Github @splincode Кирилл Юсупов Frontend Developer,

25

Структура приложения

Page 26: Redux Angular · 2018-08-18 · Максим Иванов Frontend Developer, Синимекс Founder @Angular-RU на Github @splincode Кирилл Юсупов Frontend Developer,

26

Page 27: Redux Angular · 2018-08-18 · Максим Иванов Frontend Developer, Синимекс Founder @Angular-RU на Github @splincode Кирилл Юсупов Frontend Developer,

27

Page 28: Redux Angular · 2018-08-18 · Максим Иванов Frontend Developer, Синимекс Founder @Angular-RU на Github @splincode Кирилл Юсупов Frontend Developer,

28

Page 29: Redux Angular · 2018-08-18 · Максим Иванов Frontend Developer, Синимекс Founder @Angular-RU на Github @splincode Кирилл Юсупов Frontend Developer,

29

More features

1. @ngrx/effects2. @ngrx/router-store3. @ngrx/store-devtools4. @ngrx/entity5. @ngrx/schematics

Page 30: Redux Angular · 2018-08-18 · Максим Иванов Frontend Developer, Синимекс Founder @Angular-RU на Github @splincode Кирилл Юсупов Frontend Developer,

30

Boilerplate class,

decorators

Page 31: Redux Angular · 2018-08-18 · Максим Иванов Frontend Developer, Синимекс Founder @Angular-RU на Github @splincode Кирилл Юсупов Frontend Developer,

Концепция

31

Component Action

dispatch

select mutate

Service Server

Subscribe

Store

Page 32: Redux Angular · 2018-08-18 · Максим Иванов Frontend Developer, Синимекс Founder @Angular-RU на Github @splincode Кирилл Юсупов Frontend Developer,

32

Структура приложения

Page 33: Redux Angular · 2018-08-18 · Максим Иванов Frontend Developer, Синимекс Founder @Angular-RU на Github @splincode Кирилл Юсупов Frontend Developer,

33

1. @State2. @Selector3. @Actions4. Plugins

Page 34: Redux Angular · 2018-08-18 · Максим Иванов Frontend Developer, Синимекс Founder @Angular-RU на Github @splincode Кирилл Юсупов Frontend Developer,

34

Первоначальные настройки

Page 35: Redux Angular · 2018-08-18 · Максим Иванов Frontend Developer, Синимекс Founder @Angular-RU на Github @splincode Кирилл Юсупов Frontend Developer,

35

Первоначальные настройки

Page 36: Redux Angular · 2018-08-18 · Максим Иванов Frontend Developer, Синимекс Founder @Angular-RU на Github @splincode Кирилл Юсупов Frontend Developer,

36

Первоначальные настройки

Page 37: Redux Angular · 2018-08-18 · Максим Иванов Frontend Developer, Синимекс Founder @Angular-RU на Github @splincode Кирилл Юсупов Frontend Developer,

37

Первоначальные настройки

Page 38: Redux Angular · 2018-08-18 · Максим Иванов Frontend Developer, Синимекс Founder @Angular-RU на Github @splincode Кирилл Юсупов Frontend Developer,

38

Selectors

Page 39: Redux Angular · 2018-08-18 · Максим Иванов Frontend Developer, Синимекс Founder @Angular-RU на Github @splincode Кирилл Юсупов Frontend Developer,

39

Actions

Page 40: Redux Angular · 2018-08-18 · Максим Иванов Frontend Developer, Синимекс Founder @Angular-RU на Github @splincode Кирилл Юсупов Frontend Developer,

40

Actions

Page 41: Redux Angular · 2018-08-18 · Максим Иванов Frontend Developer, Синимекс Founder @Angular-RU на Github @splincode Кирилл Юсупов Frontend Developer,

41

Page 42: Redux Angular · 2018-08-18 · Максим Иванов Frontend Developer, Синимекс Founder @Angular-RU на Github @splincode Кирилл Юсупов Frontend Developer,

42

Plugins

1. Logger2. DevTools3. Forms4. Storage5. Web socket6. Router

Page 43: Redux Angular · 2018-08-18 · Максим Иванов Frontend Developer, Синимекс Founder @Angular-RU на Github @splincode Кирилл Юсупов Frontend Developer,

43

Page 44: Redux Angular · 2018-08-18 · Максим Иванов Frontend Developer, Синимекс Founder @Angular-RU на Github @splincode Кирилл Юсупов Frontend Developer,

@ngxs/cli

Page 45: Redux Angular · 2018-08-18 · Максим Иванов Frontend Developer, Синимекс Founder @Angular-RU на Github @splincode Кирилл Юсупов Frontend Developer,

45

Multiple data stores

Flux

Redux Observable Data Stores model.

Immutable updates

Page 46: Redux Angular · 2018-08-18 · Максим Иванов Frontend Developer, Синимекс Founder @Angular-RU на Github @splincode Кирилл Юсупов Frontend Developer,

Концепция

46

Component

Actiondispatch

Service Service Server

Store

updates

Query

Query Query Query

streaming datarender

interacting with other queries

Page 47: Redux Angular · 2018-08-18 · Максим Иванов Frontend Developer, Синимекс Founder @Angular-RU на Github @splincode Кирилл Юсупов Frontend Developer,

47

Component(s) Storeкак БД

низкоуровневые запросы

как в SQL

addupdatedelete

Query Service

Queries:READ..

CommandService

Commands:WRITE..

Упрощенная версия (чистый CQRS)

Page 48: Redux Angular · 2018-08-18 · Максим Иванов Frontend Developer, Синимекс Founder @Angular-RU на Github @splincode Кирилл Юсупов Frontend Developer,

48

Page 49: Redux Angular · 2018-08-18 · Максим Иванов Frontend Developer, Синимекс Founder @Angular-RU на Github @splincode Кирилл Юсупов Frontend Developer,

49

Структура приложения

Page 50: Redux Angular · 2018-08-18 · Максим Иванов Frontend Developer, Синимекс Founder @Angular-RU на Github @splincode Кирилл Юсупов Frontend Developer,

DEMO

Page 51: Redux Angular · 2018-08-18 · Максим Иванов Frontend Developer, Синимекс Founder @Angular-RU на Github @splincode Кирилл Юсупов Frontend Developer,

Немного статистики

Page 52: Redux Angular · 2018-08-18 · Максим Иванов Frontend Developer, Синимекс Founder @Angular-RU на Github @splincode Кирилл Юсупов Frontend Developer,

Ключевые различия

Github-звезды 3.4k 1.3k 371

Boilerplate

Кривая обучения

Простота добавления и их покрытие кода тестами

Enterprise CQRS (aka Java)

Документация, материалы

CLI, Schematics, Plugins

Подходит лучше всего: for React bad-boys Middle Enterprise High Enterprise in Future52

Результаты

Page 53: Redux Angular · 2018-08-18 · Максим Иванов Frontend Developer, Синимекс Founder @Angular-RU на Github @splincode Кирилл Юсупов Frontend Developer,

53

Page 54: Redux Angular · 2018-08-18 · Максим Иванов Frontend Developer, Синимекс Founder @Angular-RU на Github @splincode Кирилл Юсупов Frontend Developer,

Хороший,Плохой,

Злой

STORE

Page 55: Redux Angular · 2018-08-18 · Максим Иванов Frontend Developer, Синимекс Founder @Angular-RU на Github @splincode Кирилл Юсупов Frontend Developer,

55

СПАСИБО за внимание!Полезные материалы:https://github.com/Angular-RU/redux-demo