Slide 1

Slide 1 text

Collocation in Modern Web

Slide 2

Slide 2 text

DO WE WRITE PROGRAMS

Slide 3

Slide 3 text

.title { color: red; }

document.querySelector('.title') .innerHTML = 'Collocation' index.html

Slide 4

Slide 4 text

+ src + components - header.js - header.css - nav.js - nav.css - app.js - app.css

Slide 5

Slide 5 text

Modern Web Apps

Slide 6

Slide 6 text

C o l l o c a t i o n & R e a c t

Slide 7

Slide 7 text

import React, { Component } from 'react' export default class Header extends Component { render () { return ( {this.children} ) } } header.jsx

Slide 8

Slide 8 text

.my-header { margin: 16px; font-size: 1.5rem; color: black; } header.css

Slide 9

Slide 9 text

import React, { Component } from 'react' import StyleSheet from 'some-css-in-js' const styles = StyleSheet.create({ header: { margin: '16px', fontSize: '16px', color: 'black' } }) export default class Header extends Component { render () { return ( {this.children} ) } } header.jsx

Slide 10

Slide 10 text

header.jsx import React, { Component } from 'react' import style from 'some-css-in-js' const myHeader = style` margin: 16px; font-size: 1.5rem; color: black; ` export default class Header extends Component { render () { return ( {this.children} ) } }

Slide 11

Slide 11 text

C o l l o c a t i o n & W e b C o m p o n e n t s

Slide 12

Slide 12 text

header.html .my-header { margin: 16px; font-size: 1.5rem; color: black; } class Header extends HTMLElement { connectedCallback () { const doc = document.currentScript.ownerDocument const template = doc.querySelector('#template') this.attachShadow({ mode: 'open' }) this.shadowRoot.appendChild( doc.importNode(template.content, true)) } } window.customElements.define('my-header', Header)

Slide 13

Slide 13 text

C o l l o c a t i o n & V u e

Slide 14

Slide 14 text

export default { name: 'MyHeader' } .my-header { margin: 16px; font-size: 1.5rem; color: black; } header.vue

Slide 15

Slide 15 text

p u s h i n g e v e n f u r t h e r

Slide 16

Slide 16 text

export default { name: 'MyHeader' } .my-header { margin: 16px; font-size: 1.5rem; color: black; } header.vue

Slide 17

Slide 17 text

export default { name: 'MyHeader' } .my-header { margin: 16px; font-size: 1.5rem; color: black; } header.vue

Slide 18

Slide 18 text

header.vue export default { name: 'MyHeader' } .my-header { margin: 16px; font-size: 1.5rem; color: black; }

Slide 19

Slide 19 text

header.vue export default { name: 'MyHeader' } # MyHeader It renders a custom header element. ...

Slide 20

Slide 20 text

header.vue export default { name: 'MyHeader' } import { mount } from 'vue-test-utils' test(`it renders children`, t => { const w = mount(Component, { slots: { default: '

Hello World

' } }) t.true(w.contains('h1')) })

Slide 21

Slide 21 text

header.vue export default { name: 'MyHeader' }

DevFest 17

Slide 22

Slide 22 text

Collocation — Review! Improved Readability Better CSS Easy Distribution Encapsulation Single Source Static Analysis Compile-time Optimisations Style Scoping And many more…

Slide 23

Slide 23 text

@znck0 Twitter znck Github znck.me Website vue-bangalore Meetup

Slide 24

Slide 24 text

No content