flexible ui components for a multi-framework world

83
Flexible UI Components UI Development For a Multi-Framework World @kbal11 [email protected] https://zendev.com

Upload: fitc

Post on 22-Jan-2018

174 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Flexible UI Components for a Multi-Framework World

Flexible UI ComponentsUI Development For a Multi-Framework World

@[email protected]://zendev.com

Page 2: Flexible UI Components for a Multi-Framework World

Implementing UI is Easier Than Ever

Page 3: Flexible UI Components for a Multi-Framework World

Let’s remember how it used to be…

Page 4: Flexible UI Components for a Multi-Framework World

How It Used To Be

• Tables for layout

• Hand-coded CSS IF YOU WERE LUCKY

• Spend a week on a site, and then another week getting it to work on Internet Explorer

Page 5: Flexible UI Components for a Multi-Framework World

Photo Credit: http://dullneon.com/randomnotes/2016/07/goodbye-yahoo.html

Yahoo

Page 6: Flexible UI Components for a Multi-Framework World

GeoCities

Photo Credit: http://geocitiessites.com/soho/veranda/4103/

Page 7: Flexible UI Components for a Multi-Framework World

When I first learned about Grid 960…

Page 8: Flexible UI Components for a Multi-Framework World

When I first learned about Grid 960…

Page 9: Flexible UI Components for a Multi-Framework World

We’ve come a long way…

Page 10: Flexible UI Components for a Multi-Framework World

Modern UI Frameworks

Page 11: Flexible UI Components for a Multi-Framework World

[ bootstrap image ]

Page 12: Flexible UI Components for a Multi-Framework World
Page 13: Flexible UI Components for a Multi-Framework World
Page 14: Flexible UI Components for a Multi-Framework World
Page 15: Flexible UI Components for a Multi-Framework World

But We’re Still Doing It Wrong

Page 16: Flexible UI Components for a Multi-Framework World

JS Ecosystem When Modern Frameworks Emerged

(Pre 1.0!) (Barely 1.0!)

Page 17: Flexible UI Components for a Multi-Framework World

JS Ecosystem Today

Page 18: Flexible UI Components for a Multi-Framework World

UI Libraries Are Done Two Ways

Page 19: Flexible UI Components for a Multi-Framework World

The Bootstrap Way

• Naive to JS Frameworks

• Provide “Vanilla” Implementation

• Every JavaScript Framework gets its own “port” (rewrite)

Page 20: Flexible UI Components for a Multi-Framework World

The Material Way

• Pick a JavaScript Framework

• Deep Integration with that JS

• Rewrite if needed for other frameworks

Page 21: Flexible UI Components for a Multi-Framework World

The Result Is The Same

Page 22: Flexible UI Components for a Multi-Framework World

[ image of visual inconsistencies]

Photo Credit: https://www.thisiswhyimbroke.com/warping-mirrors/

Page 23: Flexible UI Components for a Multi-Framework World

Marketing Site

Web App MobileApp

Page 24: Flexible UI Components for a Multi-Framework World

Environments Are Not Consolidating

Page 25: Flexible UI Components for a Multi-Framework World

Marketing Site Web App Mobile

App

Page 26: Flexible UI Components for a Multi-Framework World

Wordpress + jQuery

MobileAppWeb App

Page 27: Flexible UI Components for a Multi-Framework World

Wordpress + jQuery

MobileApp

React +Redux

Page 28: Flexible UI Components for a Multi-Framework World

Wordpress + jQuery

Ionic(Angular)

React + Redux

Page 29: Flexible UI Components for a Multi-Framework World

Environments Have

• Different DOM manipulation paradigms

• Different “natural” markup structures

• Different approaches to state

Page 30: Flexible UI Components for a Multi-Framework World

Environments Don’t Have

• Different User Expectations

• Different Branding Needs

Page 31: Flexible UI Components for a Multi-Framework World

We Can Do Better

Page 32: Flexible UI Components for a Multi-Framework World

About Me

• Lead of ZURB Foundation project

• Founder & President ZenDev, LLC

• Known to get a bit over-excited about CSS and JavaScript

Page 33: Flexible UI Components for a Multi-Framework World

Photo Credit: ZURB

Just a little over-excited

Page 34: Flexible UI Components for a Multi-Framework World

About ZenDev

• Frontend Consulting - Strategy, Architecture, and all things ZURB Foundation

• Team Training - ZURB Foundation

• Publishing Friday Frontend newsletter: https://zendev.com/friday-frontend.html

Page 35: Flexible UI Components for a Multi-Framework World

ZURB Foundation 7

Page 36: Flexible UI Components for a Multi-Framework World

ZURB Foundation 7

• Design Language Agnostic

• JavaScript Framework Agnostic

• “Flexible UI Components”

Design Goals

Page 37: Flexible UI Components for a Multi-Framework World

Flexible UI Components

Page 38: Flexible UI Components for a Multi-Framework World

Flexible UI Components

Components designed to be adapted to any JS framework

Page 39: Flexible UI Components for a Multi-Framework World

Principles of Flexible UI Components

• Components Should Be State Driven

• Coupling Should Be Event Driven

• Components Should Be “DOM Flexible”

Page 40: Flexible UI Components for a Multi-Framework World

• Components Should Be State Driven

• Coupling Should Be Event Driven

• Components Should Be “DOM Flexible”

Principles of Flexible UI Components

Page 41: Flexible UI Components for a Multi-Framework World

The 2 Component Programming Models

• Imperative Manipulation

• State-driven implicit manipulation

Page 42: Flexible UI Components for a Multi-Framework World

Imperative manipulation is like telling your kids what to do

Page 43: Flexible UI Components for a Multi-Framework World

• Go to your room

• Pick out one pair of underwear

• Pick out one pair of pants

• Pick out one shirt

Imperative manipulation is like telling your kids what to do

Page 44: Flexible UI Components for a Multi-Framework World

Photo Credit: My Wife

Page 45: Flexible UI Components for a Multi-Framework World

Imperative Manipulation Example

elem.setAttribute(‘aria-selected’: ‘active’);elem.classList.add(‘selected’);

Page 46: Flexible UI Components for a Multi-Framework World

Paradigms Using Imperative Manipulation

• Native JavaScript

• jQuery

• Polymer/Web Components

Page 47: Flexible UI Components for a Multi-Framework World

State driven manipulation is like me taking my car to the shop

Page 48: Flexible UI Components for a Multi-Framework World

• This car should be more awesome. Make it happen.

State driven manipulation is like me taking my car to the shop

Page 49: Flexible UI Components for a Multi-Framework World

Photo Credit: http://www.mycarconnector.com/pimp-my-ride-was-a-big-fat-lie/

Page 50: Flexible UI Components for a Multi-Framework World

Photo Credit: https://www.pinterest.com/pin/431219733043180678/

Page 51: Flexible UI Components for a Multi-Framework World

Photo Credit: http://www.carsut.com/pimped-out-cars/

Page 52: Flexible UI Components for a Multi-Framework World

State Driven Example

component.setState({‘selected’: true});

Page 53: Flexible UI Components for a Multi-Framework World

Examples of State Driven

• Angular

• React

• Vue

• Ember

Page 54: Flexible UI Components for a Multi-Framework World

State => Imperative is easy.

Imperative => State is HARD.

Page 55: Flexible UI Components for a Multi-Framework World

Implication: Treat EVERYTHING as State

Page 56: Flexible UI Components for a Multi-Framework World

EVERYTHING as State

• Application State

• UI State

• User entered content

• ARIA attributes

Page 57: Flexible UI Components for a Multi-Framework World

• Components Should Be State Driven

• Coupling Should Be Event Driven

• Components Should Be “DOM Flexible”

Principles of Flexible UI Components

Page 58: Flexible UI Components for a Multi-Framework World

Coupling Should Be Event Driven

• Loose Coupling > Tight Coupling

• Enables Different Models of State

Page 59: Flexible UI Components for a Multi-Framework World

Loose Coupling > Tight Coupling

Page 60: Flexible UI Components for a Multi-Framework World

Photo Credit: https://gfycat.com/gifs/detail/abandonedsizzlinghatchetfish

Challenges of Tight Coupling

Page 61: Flexible UI Components for a Multi-Framework World

Loose Coupling

• Allows multitude of component relationship models

• Enables multitude of programming models

Page 62: Flexible UI Components for a Multi-Framework World

Multiple Models of State

• Redux: event === dispatch

• RxJS: Components => observables

• Native: event => update local state imperatively

Page 63: Flexible UI Components for a Multi-Framework World

Redux

myComponent.on(‘core.event’, (e, stateChange) => { dispatch(‘MY_COMPONENT_CHANGE’, stateChange)});

Page 64: Flexible UI Components for a Multi-Framework World

RXJS

myComponent.subscribe(‘core.event’, (stateChange) => { doSomethingWithIt();});

Page 65: Flexible UI Components for a Multi-Framework World

Flexible UI Components

• Components Should Be State Driven

• Coupling Should Be Event Driven

• Components Should Be “DOM Flexible”

Page 66: Flexible UI Components for a Multi-Framework World

What does “DOM Flexible” Mean?

• Explicit over Implicit

• Classes and Attributes over Elements

• Can still facilitate common cases via opt-in

Page 67: Flexible UI Components for a Multi-Framework World

Class and Attributes Over Elements

<ulclass="dropdownmenu"data-dropdown-menu><li><ahref="#">Item1</a><ulclass="menu"><li><ahref="#">Item1A</a></li></ul></li><li><ahref="#">Item2</a></li></ul>

Page 68: Flexible UI Components for a Multi-Framework World

Class and Attributes Over Elements

<ulclass="dropdownmenu"data-dropdown-menu><liclass="dropdown-menu-item"data-dropdown-menu-item><ahref="#">Item1</a><uldata-dropdown-submenuclass=“menu”><liclass="dropdown-menu-item"data-dropdown-menu-item><ahref="#">Item1A</a></li></ul></li><liclass="dropdown-menu-item"data-dropdown-menu-item><ahref="#">Item2</a></li></ul>

Page 69: Flexible UI Components for a Multi-Framework World

Class and Attributes Over Elements

• Allows Finer Control

• Allow More Variation

• More Verbose

Page 70: Flexible UI Components for a Multi-Framework World

More Verbose: Too Much Typing?

Page 71: Flexible UI Components for a Multi-Framework World

Facilitate Common Cases

Page 72: Flexible UI Components for a Multi-Framework World

Facilitate Common Cases

<ulclass="dropdownmenu"data-dropdown-menu><li><ahref="#">Item1</a><ulclass="menu"><li><ahref="#">Item1A</a></li></ul></li><li><ahref="#">Item2</a></li></ul>

Page 73: Flexible UI Components for a Multi-Framework World

Facilitate Common Cases

<ulclass="dropdownmenus-dropdown-menu"data-dropdown-menudata-dropdown-menu-implicit><li><ahref="#">Item1</a><ulclass="menu"><li><ahref="#">Item1A</a></li></ul></li><li><ahref="#">Item2</a></li></ul>

Page 74: Flexible UI Components for a Multi-Framework World

Lets Review

Page 75: Flexible UI Components for a Multi-Framework World

Flexible UI Components

• Components Should Be State Driven

• Coupling Should Be Event Driven

• Components Should Be “DOM Flexible”

Page 76: Flexible UI Components for a Multi-Framework World

Re-imagining the model of UI Frameworks

Page 77: Flexible UI Components for a Multi-Framework World

Component Libraries are Developer Utilities

The Old Model

Page 78: Flexible UI Components for a Multi-Framework World

Component Libraries are Developer Utilities

The Old Model

Page 79: Flexible UI Components for a Multi-Framework World

The New Model

• Put User Experience First

• Enable Shared Language Between Design & Development

• Enable Consistency Across All Brand Faces

Component Libraries…

Page 80: Flexible UI Components for a Multi-Framework World

How Do We Get There?

Page 81: Flexible UI Components for a Multi-Framework World

1. Recognize UI/UX as a primary concern.

2. Advocate against JS Framework elitism

3. UI Frameworks need more JavaScript experts involved.

4. JavaScript Frameworks need more designers involved.

How Do We Get There?

Page 82: Flexible UI Components for a Multi-Framework World

Questions?

Page 83: Flexible UI Components for a Multi-Framework World

Thank you!

@[email protected]://zendev.com