29
Most JS frameworks day или как приготовить современные Web Components RIOT

Анджей Гужовский "Riot.JS, или как приготовить современные Web Components"

  • Upload
    fwdays

  • View
    156

  • Download
    3

Embed Size (px)

Citation preview

Page 1: Анджей Гужовский "Riot.JS, или как приготовить современные Web Components"

Заголовок презентацииИмя и фамилия автора докладаКомпания

Most JSframeworksday

или как приготовитьсовременные Web Components

RIOT

Page 2: Анджей Гужовский "Riot.JS, или как приготовить современные Web Components"

RIOT

Page 3: Анджей Гужовский "Riot.JS, или как приготовить современные Web Components"

11k GitHub

RIOT

3 years old

2384 commits

Page 4: Анджей Гужовский "Riot.JS, или как приготовить современные Web Components"

RIOT

<todo> <h3>TODO</h3>

<ul> <li each={ item, i in items }>{ item }</li> </ul>

<form onsubmit={ handleSubmit }> <input ref="input"> <button>Add #{ items.length + 1 }</button> </form>

this.items = []

handleSubmit( e ) { e.preventDefault() var input = this.refs.input this.items.push( input.value ) input.value = '' } </todo>

Page 5: Анджей Гужовский "Riot.JS, или как приготовить современные Web Components"

RIOTПочему ?

Что внутри и как сделано

Page 6: Анджей Гужовский "Riot.JS, или как приготовить современные Web Components"

RIOT

Простой

Стандартный

Современный

Page 7: Анджей Гужовский "Riot.JS, или как приготовить современные Web Components"

Простой

Легко читаемый

Лаконичный

Удобный синтаксис

Изучить за 1 день

RIOT

Page 8: Анджей Гужовский "Riot.JS, или как приготовить современные Web Components"

Стандартный

Ваши привычные инструменты,

шаблонизаторы,

Близок к стандартам

библиотеки и практики

Native JavaScript

RIOT

Page 9: Анджей Гужовский "Riot.JS, или как приготовить современные Web Components"

Современный

Маленький размер

Живое сообщество

Изоморфный

Web Components

RIOT

Page 10: Анджей Гужовский "Riot.JS, или как приготовить современные Web Components"

Web Components

Templates

Shadow DOM

Custom Elements

Imports

Observer

Page 11: Анджей Гужовский "Riot.JS, или как приготовить современные Web Components"

RIOT

Templates Tags

Virtual DOM

Router

Observer

— это

Page 12: Анджей Гужовский "Riot.JS, или как приготовить современные Web Components"

RIOTTag

ES6 синтаксис методов

Компилятор

Пре-процессоры

Рендеринг на сервере

Page 13: Анджей Гужовский "Riot.JS, или как приготовить современные Web Components"

RIOTTag

<example-tag>

<!-- layout --> <ul click={ greet }> <li each={ item, i in items }> { item } </li> </ul>

<!-- style --> <style> ul { list-style: square; } </style>

<!-- logic --> <script> this.items = [ 'one', 'two' ] this.on( 'mount', log ) </script>

</example-tag>

Custom Element

HTML import

Template, Shadow DOM

Observer, Tag Lifecycle

Page 14: Анджей Гужовский "Riot.JS, или как приготовить современные Web Components"

RIOT

sample p test { value }

script( type = 'text/coffee' ). @value = 'sample'

Pug (jade)

Coffee script

$ riot --template pug sample.tag CLI compiler

TagПре-процессоры

Page 15: Анджей Гужовский "Riot.JS, или как приготовить современные Web Components"

RIOTTemplates

Универсальные { expr }

для имен классов, атрибутов

и обработчиков событий

Экономичная работа с DOM

Шаблоны остаются шаблонами

Page 16: Анджей Гужовский "Riot.JS, или как приготовить современные Web Components"

RIOTTemplates

<example> <ul if={ is_logged }> <li each={ items } class={ completed: done }> <input type="checkbox" checked={ done }> { title } </li> </ul> </example>

show, hide

if

each

is_logged = true items = [ { title: 'First item', done: true }, { title: 'Second item' } ]

Универсальные { expr }

Page 17: Анджей Гужовский "Riot.JS, или как приготовить современные Web Components"

RIOT

Жизненный цикл тега

Observer

Интерфейс событий

События от пользователя

Page 18: Анджей Гужовский "Riot.JS, или как приготовить современные Web Components"

RIOTObserver

this.on( 'mount', function() { timer = setTimeout( ... ) }) this.on( 'unmount', function() { clearTimeout( timer ) })

update

updated

before-mount

mount

before-unmount

unmount

Жизненный цикл тега

Page 19: Анджей Гужовский "Riot.JS, или как приготовить современные Web Components"

RIOTObserver

function Car() {

riot.observable(this)

this.on('start', function() { })

}

var car = new Car()

car.trigger('start')

Интерфейс событий

Page 20: Анджей Гужовский "Riot.JS, или как приготовить современные Web Components"

RIOTObserver

<handler> <a onclick={ click }>

click(e) { e.preventDefault() } </handler>

e.currentTarget

e.target

e.which

e.item

События от пользователя

Page 21: Анджей Гужовский "Riot.JS, или как приготовить современные Web Components"

RIOTRouter

route( '/page/*', function( name ) { riot.mount( '#content', name ) })

riot.route.start()

route( '/page/awesome' )

Простой роутер с Wildcards

Page 22: Анджей Гужовский "Riot.JS, или как приготовить современные Web Components"

RIOTMount

riot.mount( '*' )

riot.mount( '#my-element', { opts } )

riot.mount( 'todo, forum, comments' )

Подключение тегов и запуск приложения

Page 23: Анджей Гужовский "Riot.JS, или как приготовить современные Web Components"

RIOTIsomorphic

var riot = require( 'riot' ) var timer = require( 'timer.tag' )

var html = riot.render( timer, { start: 42 } )

console.log( html )

// <timer><p>Seconds Elapsed: 42</p></timer>

Server Side Rendering

Page 24: Анджей Гужовский "Riot.JS, или как приготовить современные Web Components"

RIOT

Polymer SkateJS X-tag

Аналоги

11k

2k17k <1k

Page 25: Анджей Гужовский "Riot.JS, или как приготовить современные Web Components"

RIOTКирпичи для

Разработки сообщества

Page 26: Анджей Гужовский "Riot.JS, или как приготовить современные Web Components"

RIOT GEAR

Набор UI-компонент

Удобный Router

Page 27: Анджей Гужовский "Riot.JS, или как приготовить современные Web Components"

...

RiotControl

Централизованный Контроллер Событий

Inspired by Flux

RiotControl.addStore( store )

RiotControl.trigger( event )

RiotControl.on( event, callback )

Page 28: Анджей Гужовский "Riot.JS, или как приготовить современные Web Components"

RIOTСтроим с !

Примеры построения приложений, сборки и тестирования

Page 29: Анджей Гужовский "Riot.JS, или как приготовить современные Web Components"

Спасибо

Анджей Гужовский

2016

http://devdroid.net

Архитектор интернет систем, компания Betlab