angular. mobx. happiness

50
1. Angular 2. MobX 3. Happiness Adam Klein

Upload: 500tech

Post on 21-Jan-2017

322 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Angular. MobX. Happiness

1. Angular 2. MobX 3. Happiness

Adam Klein

Page 2: Angular. MobX. Happiness

Adam Klein

-Frontend developer & consultant -Open source (ng2-tree, ng2-mobx) -Co-organizer of AngularUP -Fun fact: I used to have a jewfro

CTO @ 500Tech

Page 3: Angular. MobX. Happiness
Page 4: Angular. MobX. Happiness

mmmm…. cake….

Page 5: Angular. MobX. Happiness

Regular checkbox

Selected Items Master Checkbox

Master Checkbox

Filtered Items

add a framework change filter

Imperative

Page 6: Angular. MobX. Happiness

Declarative

Page 7: Angular. MobX. Happiness

getFilteredItems() { const regexp = new RegExp(this.filter, 'i'); return this.items .filter((item) => regexp.test(item.name)); }

Declarative

Page 8: Angular. MobX. Happiness

Declarative

<div *ngFor="let item of getFilteredItems()"> {{ item.title }}</div>

Page 9: Angular. MobX. Happiness

Declarative

<div *ngFor="let item of getFilteredItems()"> {{ item.title }}</div>

Page 10: Angular. MobX. Happiness
Page 11: Angular. MobX. Happiness
Page 12: Angular. MobX. Happiness

Being declarative &

Staying performant?

Page 13: Angular. MobX. Happiness

PRESENTATION TITLE

Presenter Name

Small Subtitle

[DELETE THIS]: Presentation caption should be ALL CAPS, small subtitle should be All Capitalized

MobXyes we can

Page 14: Angular. MobX. Happiness

Michel Weststrate from Mendix

Was written for React

Completely framework agnostic

Automagically react to changes

Works with plain objects

MobX

Page 15: Angular. MobX. Happiness

Taking the state out of components

Page 16: Angular. MobX. Happiness

Items Filter

Checkbox ListFilter

Add New Selected Items

Remove Item InputSelected

Item

App

State

Components

State

Page 17: Angular. MobX. Happiness

Minimal State (@observable)

List of Frameworks

Selected Items

Filter Master Checkbox

Filtered Items

Derived State (@computed)

Page 18: Angular. MobX. Happiness

@Injectable() class State { filter = ''; items = []; }

Observable

Page 19: Angular. MobX. Happiness

@Injectable() class State { filter = ''; items = []; }

Observable

Page 20: Angular. MobX. Happiness

import { observable } from 'mobx';

@Injectable() class State { @observable filter = ''; @observable items = []; }

Observable

Page 21: Angular. MobX. Happiness

… getFilteredItems() { const regexp = new RegExp(this.filter, 'i'); return this.items .filter((item) => regexp.test(item.name)); } …

Computed

Page 22: Angular. MobX. Happiness

… @computed get filteredItems() { const regexp = new RegExp(this.filter, 'i'); return this.items .filter((item) => regexp.test(item.name)); } …

Computed

Page 23: Angular. MobX. Happiness

… @computed get filteredItems() { const regexp = new RegExp(this.filter, 'i'); return this.items .filter((item) => regexp.test(item.name)); } …

Computed

Page 24: Angular. MobX. Happiness

… setFilter(value) { this.filter = value; } …

Action

Page 25: Angular. MobX. Happiness

… setFilter(value) { this.filter = value; } …

Action

Page 26: Angular. MobX. Happiness

… @action setFilter(value) { this.filter = value; } …

Action

Page 27: Angular. MobX. Happiness
Page 28: Angular. MobX. Happiness

List of Frameworks

Selected Items

Filter Master Checkbox

Filtered Items

Selected Frameworks Component

Frameworks Filter Component

UI Components Obesrve?

State

Page 29: Angular. MobX. Happiness
Page 30: Angular. MobX. Happiness

ng2-mobxgithub.com/500tech/

• 64 lines of code • Automatically observes state from the components • Deregisters observers onDestroy

Page 31: Angular. MobX. Happiness

With MobX

Page 32: Angular. MobX. Happiness

With MobX

Page 33: Angular. MobX. Happiness

export class SelectedItemsComponent { constructor(private state:State) {}}

<div> {{ state.filteredItems }}</div>

ng2-mobx

Page 34: Angular. MobX. Happiness

export class SelectedItemsComponent { constructor(private state:State) {}}

<div> {{ state.filteredItems }} </div>

ng2-mobx

Page 35: Angular. MobX. Happiness

export class SelectedItemsComponent { constructor(private state:State) {}}

<div> {{ state.filteredItems }} </div>

ng2-mobx

Page 36: Angular. MobX. Happiness

export class SelectedItemsComponent { constructor(private state:State) {}}

<div *mobxAutorun> {{ state.filteredItems }}</div>

ng2-mobx

Page 37: Angular. MobX. Happiness

@observable

List of Frameworks

Selected Items

Filter Master Checkbox

Filtered Items

@computed

Selected Frameworks Component

Frameworks Filter Component

UI Componentsng2-mobx

Page 38: Angular. MobX. Happiness
Page 39: Angular. MobX. Happiness
Page 40: Angular. MobX. Happiness
Page 41: Angular. MobX. Happiness

ChangeDetectionStrategy.OnPush

Page 42: Angular. MobX. Happiness
Page 43: Angular. MobX. Happiness
Page 44: Angular. MobX. Happiness
Page 45: Angular. MobX. Happiness
Page 46: Angular. MobX. Happiness
Page 47: Angular. MobX. Happiness

MobX Redux

Plain objectsImmutable data

actions, middleware, dispatcher, reducers, selectors

Automatic Explicit

Computed values Use reselect

Page 48: Angular. MobX. Happiness

What’s next?ng-mobx for Angular1

Page 49: Angular. MobX. Happiness

@adamklein500

www.slideshare.net/500techOur slides:

Adam [email protected]

https://github.com/500tech/angular1-mobx-demo

https://github.com/500tech/angular2-mobx-demo

Page 50: Angular. MobX. Happiness

Thank You

MAKE ANGULAR

GREAT AGAIN