ããæç¹ã§ãç§ã¯ç·æ¥ã«Webã³ã³ããŒãã³ãã«ç²Ÿéãããããã䜿çšããŠäŸ¿å©ã«éçºããæ¹æ³ãèŠã€ããªããã°ãªããŸããã§ããã æ¬¡ã®ãããªäžé£ã®èšäºãæžãäºå®ã§ã
äœããã®åœ¢ã§Webã³ã³ããŒãã³ãã®ç¥èãæŽçããèŠçŽ ãæããããä»ã®äººã®ããã«ãã®æè¡ã®ç°¡åãªç޹ä»ãããŸãã ç§ã¯ãã®æè¡ã®å°éå®¶ã§ã¯ãããŸããã®ã§ããã£ãŒãããã¯ãåãã§åãå
¥ããŸãã
lit-elementã¯ããã€ãã£ãWebã³ã³ããŒãã³ãã®ã©ãããŒïŒåºæ¬ãã³ãã¬ãŒãïŒã§ãã 仿§ã«ãªãå€ãã®äŸ¿å©ãªã¡ãœãããå®è£
ããŠããŸãã ãã€ãã£ãå®è£
ã«è¿ããããlit-elementã¯ä»ã®ã¢ãããŒããšæ¯èŒããŠããŸããŸãªãã³ãããŒã¯ã§éåžžã«è¯ãçµæã瀺ããŠããŸãïŒ2019幎2æ6æ¥çŸåšïŒã
lit-elementãWebã³ã³ããŒãã³ãã®åºæ¬ã¯ã©ã¹ãšããŠäœ¿çšããããšã§åŸãããããŒãã¹ïŒ
- ãã®æè¡ã¯ãã§ã«ç¬¬2ã®ããŒãžã§ã³ãå®è£
ããŠããããå°å
ç
ã§ç
æ°ã«ãªã£ããããšããããŸãããããã¯ç»å Žããã°ããã®åšå
·ã«ç¹æã®ãã®ã§ãã
- ã¢ã»ã³ããªã¯ãããªããŒãšãŠã§ãããã¯ãã¿ã€ãã¹ã¯ãªãããããŒã«ã¢ãããªã©ã®äž¡æ¹ã§å®è¡ã§ããŸããããã«ãããåé¡ãªãææ°ã®ãããžã§ã¯ãã«ç
§æèŠçŽ ãåã蟌ãããšãã§ããŸãã
- litèŠçŽ ã«ã¯ãå€ã®å
¥åãéå§ã倿ã«é¢ããŠããããã£ãæäœããéåžžã«äŸ¿å©ãªã·ã¹ãã ããããŸãã
- lit-elementã¯ãreactãšã»ãŒåãããžãã¯ãå®è£
ããŠããŸãã ã³ã³ããŒãã³ããšãã®ã¬ã³ããªã³ã°ãæ§ç¯ããããã®åäžã®ãã³ãã¬ãŒããæäŸããéçºè
ããšã³ã·ã¹ãã ãšè¿œå ã®ã©ã€ãã©ãªãéžæããããšãå¶éããŸããã
lit-elementã§ç°¡åãªWebã³ã³ããŒãã³ããäœæããŸãããã ããã¥ã¡ã³ããèŠãŠã¿ãŸãããã æ¬¡ã®ãã®ãå¿
èŠã§ãã
- lit-elementãå«ãnpmããã±ãŒãžãã¢ã»ã³ããªã«è¿œå ããŸã
npm install --save lit-element
- ã³ã³ããŒãã³ããäœæããŸãã
ããšãã°ã my-component
ã¿ã°ã§åæåãããWebã³ã³ããŒãã³ããäœæããå¿
èŠããããŸãã ãããè¡ãã«ã¯ãjsãã¡ã€ã«my-component.js
ãäœæãããã®åºæ¬ãã³ãã¬ãŒããå®çŸ©ããŸãã
ãŸããåºæ¬ãã³ãã¬ãŒããã€ã³ããŒãããŸãã
import { LitElement, html } from 'lit-element';
次ã«ã LitElement
ã䜿çšããŠWebã³ã³ããŒãã³ãèªäœãäœæããŸã
æåŸã«ããã©ãŠã¶ã«Webã³ã³ããŒãã³ããç»é²ããŸã
customElements.define('my-component', MyComponent);
ãã®çµæã次ã®çµæãåŸãããŸãã
import { LitElement, html } from 'lit-element'; class MyComponent extends LitElement { render() { return html`<p>Hello World!</p>` } } customElements.define('my-component', MyComponent);
my-component.js
ãhtmlã«æ¥ç¶ããå¿
èŠããªãå Žåã¯ãããã ãã§ãã æãåçŽãªã³ã³ããŒãã³ããçšæãããŠããŸãã
è»èŒªãåçºæãããlit-element-build-rollupã®å®æããã¢ã»ã³ããªãååŸããããšãææ¡ããŸãã æç€ºã«åŸã£ãŠãã ããïŒ
git clone https://github.com/PolymerLabs/lit-element-build-rollup.git cd lit-element-build-rollup npm install npm run build npm run start
ãã¹ãŠã®ã³ãã³ããå®äºãããããã©ãŠã¶ãŒã®ããŒãžhttpïŒ// localhostïŒ5000 /ã«ç§»åããŸãã
htmlãèŠããšã webcomponents-loader.jsãçµäºã¿ã°ã®åã«ããããšãããããŸãã ããã¯ãWebã³ã³ããŒãã³ãçšã®ããªãã£ã«ã®ã»ããã§ãããWebã³ã³ããŒãã³ãã®ã¯ãã¹ãã©ãŠã¶æäœã®ããã«ããã®ããªãã£ã«ãååšããããšãæãŸããã§ãã Webã³ã³ããŒãã³ããæäœããããã®ãã¹ãŠã®æšæºãå®è£
ãããã©ãŠã¶ãŒã®è¡šãèŠãŠã¿ãŸããããEDGEã¯ãŸã æšæºãå®å
šã«ã¯å®è£
ããŠããªããšèšããŸãïŒãµããŒããå¿
èŠãªIE11ã«ã€ããŠã¯é»ã£ãŠããŸãïŒã

ãã®ããªãã£ã«ã«2ã€ã®ãªãã·ã§ã³ãå®è£
ããŸããïŒ
- webcomponents-bundle.js-ãã®ããŒãžã§ã³ã«ã¯ããªãã£ã«ã®ãã¹ãŠã®å¯èœãªãªãã·ã§ã³ãå«ãŸããŠããããã¹ãŠéå§ãããŸãããåããªãã£ã«ã¯æ€åºãããå
åã«åºã¥ããŠã®ã¿æ©èœããŸãã
- webcomponents-loader.jsã¯ãæ€åºãããçç¶ã«åºã¥ããŠãå¿
èŠãªããªãã£ã«ãããŒãããæå°éã®ããŒãããŒããŒã§ã
ãŸããå¥ã®polyfill- custom-elements-es5-adapter.jsã«ã泚æããŠãã ããã 仿§ã«ããã°ããã€ãã£ãcustomElements.defineã«è¿œå ã§ããã®ã¯ES6ã¯ã©ã¹ã®ã¿ã§ãã æé«ã®ããã©ãŒãã³ã¹ãåŸãã«ã¯ãES6ã³ãŒãããµããŒããããã©ãŠã¶ãŒã«ã®ã¿ES6ã³ãŒãã転éããä»ã®ãã¹ãŠã®ãŠãŒã¶ãŒã«ES5ã³ãŒãã転éããå¿
èŠããããŸãã ãããåžžã«å¯èœã§ãããšã¯éããªãããããã©ãŠã¶ãŒéã®äºææ§ãé«ããããã«ããã¹ãŠã®ES6ã³ãŒããES5ã«å€æããããšããå§ãããŸãã ãã ãããã®å ŽåãES5ã®Webã³ã³ããŒãã³ãã¯ãã©ãŠã¶ãŒã§åäœã§ããŸããã ãã®åé¡ã解決ããããã«ãcustom-elements-es5-adapter.jsããããŸãã
./src/my-element.js
ãã¡ã€ã«ãéããŸããã
import {html, LitElement, property} from 'lit-element'; class MyElement extends LitElement {
lit-htmlãã³ãã¬ãŒããšã³ãžã³ã¯ãæååãç°ãªãæ¹æ³ã§åŠçã§ããŸãã ããã€ãã®ãªãã·ã§ã³ã玹ä»ããŸãã
renderïŒïŒé¢æ°ãæé©åããããã®ãã³ãïŒ
- èŠçŽ ã®ç¶æ
ã倿ŽããŠã¯ãããŸãã
- å¯äœçšããã£ãŠã¯ãããŸããã
- èŠçŽ ã®ããããã£ã®ã¿ã«äŸåããå¿
èŠããããŸãã
- åãå€ãéä¿¡ããå Žåãåãçµæãè¿ãå¿
èŠããããŸãã
renderïŒïŒé¢æ°ã®å€éšã§DOMãæŽæ°ããªãã§ãã ããã
Lit-htmlã¯lit-elementã®ã¬ã³ããªã³ã°ãæ
åœããŸã-ããã¯ãWebã³ã³ããŒãã³ãã®è¡šç€ºæ¹æ³ãèšè¿°ãã宣èšçãªæ¹æ³ã§ãã lit-htmlã¯ã倿Žãå¿
èŠãªDOMã®éšåã®ã¿ã倿Žããããšã«ãããé«éæŽæ°ãä¿èšŒããŸãã
ãã®ã³ãŒãã®ã»ãšãã©ã¯ç°¡åãªäŸã§ããã myProp
ããããã£ã«@property
ãã³ã¬ãŒã¿ã远å ãããŸããã ãã®ãã³ã¬ãŒã¿ã¯ã my-element
myprop
ãšããååã®å±æ§ãå¿
èŠã§ããããšã瀺ããŠããŸãã ãã®ãããªå±æ§ãèšå®ãããŠããªãå Žåãããã©ã«ãã§æååå€stuff
èšå®ãããŸãã
<my-element></my-element> <my-element myprop="else"></my-element>
lit-elementã¯ã property
ãæäœãã2ã€ã®æ¹æ³ãæäŸãproperty
ã
- ãã³ã¬ãŒã¿ãéããŠã
- éçãªã²ãã¿ãŒ
properties
ä»ããŠã
æåã®ãªãã·ã§ã³ã§ã¯ãåããããã£ãåå¥ã«æå®ã§ããŸãã
@property({type: String}) prop1 = ''; @property({type: Number}) prop2 = 0; @property({type: Boolean}) prop3 = false; @property({type: Array}) prop4 = []; @property({type: Object}) prop5 = {};
2çªç®ã¯ãã¹ãŠã1ãæã§æå®ããããšã§ããããã®å Žåãããããã£ã«ããã©ã«ãå€ãããå Žåã¯ãã¯ã©ã¹ã³ã³ã¹ãã©ã¯ã¿ãŒã¡ãœããã§èšè¿°ããå¿
èŠããããŸãã
static get properties() { return { prop1: {type: String}, prop2: {type: Number}, prop3: {type: Boolean}, prop4: {type: Array}, prop5: {type: Object} }; } constructor() { this.prop1 = ''; this.prop2 = 0; this.prop3 = false; this.prop4 = []; this.prop5 = {}; }
lit-elementã§ããããã£ãæäœããããã®APIã¯éåžžã«åºç¯å²ã§ãïŒ
- 屿§ ïŒããããã£ãç£èŠå¯èœãªå±æ§ã«ãªãããšãã§ãããã©ããã
false
å Žåã屿§ã¯ç£èŠããé€å€ãããã²ãã¿ãŒã¯äœæãããŸããã true
ãŸãã¯attribute
ååšããªãå Žåãgetterã§lowerCamelCase圢åŒã§æå®ãããããããã£ã¯ãæåå圢åŒã®å±æ§ã«å¯Ÿå¿ããŸãã my-prop
ãªã©ã®æååãæå®ãããŠããå Žåã屿§å
ã®åãååã«å¯Ÿå¿ããŸãã - converter ïŒå€ã/ãã屿§/ããããã£ã«å€æããæ¹æ³ã®èª¬æãå«ãŸããŠããŸãã å€ã¯ãå€ãã·ãªã¢ã«åããã³éã·ãªã¢ã«åããããã«æ©èœãã颿°ã«ããããšãã
fromAttribute
ããã³toAttribute
ããŒãæã€ãªããžã§ã¯ãã«ããããšãã§ããŸãããããã®ããŒã«ã¯ãå€ã倿ããããã®åå¥ã®é¢æ°ãå«ãŸããŸãã ããã©ã«ãã§ã¯ãããããã£ã«ã¯åºæ¬ã¿ã€ãBoolean
ã String
ã Number
ã Object
ããã³Array
ãžã®å€æãå«ãŸããŠããŸãã 倿èŠåã¯ããã«ãªã¹ããããŠããŸã ã - type ïŒãã®ããããã£ã«å«ãŸããåºæ¬ã¿ã€ãã®1ã€ã瀺ããŸãã ããããã£ã«å«ãŸããã¿ã€ãã«é¢ããã³ã³ããŒã¿ãŒã®ããã³ãããšããŠäœ¿çšãããŸãã
- åæ ãã ïŒå±æ§ãããããã£ã«é¢é£ä»ãïŒ
true
ïŒã type
ããã³converter
ããã®èŠåã«åŸã£ãŠå€æŽããå¿
èŠããããã©ããã瀺ããŸãã - hasChanged ïŒåããããã£ã¯ãããæã¡ãå€ãå€ãšæ°ããå€ã®éã«å€åããããã©ãããæ±ºå®ãã颿°ãå«ã¿ããããã
Boolean
è¿ããŸãã true
å Žåãã¢ã€ãã ã®æŽæ°ãéå§ããŸãã - noAccessor ïŒãã®ããããã£ã¯
Boolean
ãåãå
¥ããããã©ã«ãã¯false
ã§ãã ã¯ã©ã¹ããã¢ã¯ã»ã¹ããããã®åããããã£ã®ã²ãã¿ãŒãšã»ãã¿ãŒã®çæãçŠæ¢ããŸãã ããã¯å€æããã£ã³ã»ã«ããŸããã
æ¶ç©ºã®äŸãäœæããŸããããæååãå«ããã©ã¡ãŒã¿ãŒãå«ãWebã³ã³ããŒãã³ããäœæããŸãããã®åèªã¯ç»é¢ã«æç»ãããå¿
èŠããããåæåã¯åã®æåããã倧ãããªããŸãã
<ladder-of-letters letters=""></ladder-of-letters>
æçµçã«ã¯æ¬¡ã®ããã«ãªããŸãã

ãã¿ã³ãæŒããããšãããããã£ã倿Žãããæåã«ãã§ãã¯ãè¡ããããã®åŸåæç»ã®ããã«éä¿¡ãããŸããã

reflect
ã䜿çšãããšãHTMLã®å€æŽã確èªã§ããŸã

ãã®Webã³ã³ããŒãã³ãã®å€éšã®ã³ãŒãã§ãã®å±æ§ã倿ŽãããšãWebã³ã³ããŒãã³ããåæç»ãããŸãã
次ã«ãã³ã³ããŒãã³ãã®ã¹ã¿ã€ã«ãæ€èšããŸãã lit-elementã®ã¹ã¿ã€ã«èšå®ã«ã¯2ã€ã®æ¹æ³ããããŸãã
- ã¹ã¿ã€ã«ã¿ã°ãrenderã¡ãœããã«è¿œå ããŠã¹ã¿ã€ãªã³ã°
render() { return html` <style> p { color: green; } </style> <p>Hello World</p> `; }

- éçã²ãã¿ãŒ
styles
çµç±
import {html, LitElement, css} from 'lit-element'; class MyElement extends LitElement { static get styles() { return [ css` p { color: red; } ` ]; } render() { return html` <p>Hello World</p> `; } } customElements.define('my-element', MyElement);
ãã®çµæãã¹ã¿ã€ã«ãæã€ã¿ã°ã¯äœæãããã 仿§ã«åŸã£ãŠèŠçŽ ã®Shadow DOM
æžã蟌ãŸããŸãïŒ >= Chrome 73
ïŒã ããã«ããã倿°ã®èŠçŽ ã®ããã©ãŒãã³ã¹ãåäžããŸãã æ°ããã³ã³ããŒãã³ããç»é²ãããšããåœŒã¯æ¢ã«èªåã®ã¹ã¿ã€ã«ã決å®ããããããã£ãç¥ã£ãŠããã®ã§ãæ¯åç»é²ããŠåã«ãŠã³ãããå¿
èŠã¯ãããŸããã

åæã«ããã®ä»æ§ããµããŒããããŠããªãå Žåãéåžžã®style
ã¿ã°ãã³ã³ããŒãã³ãã«äœæãããŸãã

ããã«ããã®æ¹æ³ã§ãããŒãžã«è¿œå ããã³èšç®ãããã¹ã¿ã€ã«ãåé¢ã§ããããšãå¿ããªãã§ãã ããã ããšãã°ãCSSã§ã¯ãªãJSã§ã¡ãã£ã¢ã¯ãšãªã䜿çšããããšãã°ãç®çã®ã¹ã¿ã€ã«ã®ã¿ãå®è£
ããã«ã¯ïŒããã¯ã¯ã€ã«ãã§ãããããããå¿
èŠããããŸãïŒïŒ
static get styles() { const mobileStyle = css`p { color: red; }`; const desktopStyle = css`p { color: green; }`; return [ window.matchMedia("(min-width: 400px)").matches ? desktopStyle : mobileStyle ]; }
ãããã£ãŠããŠãŒã¶ãŒãç»é¢å¹
ã400pxãè¶
ããããã€ã¹ã«ãã°ãªã³ããå Žåãããã衚瀺ãããŸãã

ããã¯ããŠãŒã¶ãŒãå¹
400ãã¯ã»ã«æªæºã®ããã€ã¹ãããµã€ãã«ã¢ã¯ã»ã¹ããå Žåã§ãã

ç§ã®æèŠïŒãŠãŒã¶ãŒãã¢ãã€ã«ããã€ã¹ã§äœæ¥ããŠãããšãã«ãç»é¢å¹
ã1920pxã®æ¬æ Œçãªã¢ãã¿ãŒã«çªç¶çŽé¢ããå Žåãå®éã«é©åãªã±ãŒã¹ã¯ãããŸããã ããã«ã³ã³ããŒãã³ãã®é
å»¶èªã¿èŸŒã¿ã远å ããŸãã ãã®çµæãé«éã³ã³ããŒãã³ãã¬ã³ããªã³ã°ã§éåžžã«æé©åãããããã³ããåŸãããŸãã å¯äžã®åé¡ã¯ããµããŒãã®é£ããã§ãã
ããã§ãlit-elementã®ã©ã€ããµã€ã¯ã«ã¡ãœããã«ç²Ÿéããããšãææ¡ããŸãã
- renderïŒïŒ ïŒ
lit-html
ã䜿çšããŠDOMèŠçŽ ã®èª¬æãå®è£
ããŸãã çæ³çã«ã¯ã render
颿°ã¯ãèŠçŽ ã®çŸåšã®ããããã£ã®ã¿ã䜿çšããçŽç²ãªé¢æ°ã§ãã render()
ã¡ãœããã¯ã update()
颿°ã«ãã£ãŠåŒã³åºãããŸãã - shouldUpdateïŒchangedPropertiesïŒ ïŒæŽæ°ããã³ã¬ã³ããªã³ã°ãå¶åŸ¡ããå¿
èŠãããå Žåãããããã£ã倿ŽããããšãããŸãã¯
requestUpdate()
åŒã³åºããããšãã«å®è£
requestUpdate()
ããŸãã changedProperties
颿°ã®åŒæ°ã¯ã倿Žãããããããã£ã®ããŒãå«ãMap
ã§ãã ããã©ã«ãã§ã¯ããã®ã¡ãœããã¯åžžã«true
ãè¿ãtrue
ããã¡ãœããã®ããžãã¯ã倿ŽããŠã³ã³ããŒãã³ãã®æŽæ°ãå¶åŸ¡ã§ããŸãã - performUpdateïŒïŒ ïŒã¹ã±ãžã¥ãŒã©ãŒãšçµ±åãããªã©ãæŽæ°æéãå¶åŸ¡ããããã«å®è£
ãããŠããŸãã
- updateïŒchangedPropertiesïŒ ïŒãã®ã¡ãœããã¯
render()
åŒã³åºãrender()
ã ãŸããããããã£ã®å€ã«åŸã£ãŠèŠçŽ ã®å±æ§ãæŽæ°ããŸãã ãã®ã¡ãœããå
ã§ããããã£ãèšå®ããŠããå¥ã®æŽæ°ã¯çºçããŸããã - firstUpdatedïŒchangedPropertiesïŒ ïŒDOMèŠçŽ ã®æåã®æŽæ°åŸã«ã
updated()
åŒã³åºãã®çŽåã«åŒã³åºãããŸãã ãã®ã¡ãœããã¯ãããšãã°updated()
ã§çŽæ¥äœæ¥ããå¿
èŠãããèŠèŠåãããéçããŒããžã®ãªã³ã¯ããã£ããã£ããã®ã«åœ¹ç«ã¡ãŸãã - updatedïŒchangedPropertiesïŒ ïŒã¢ã€ãã ã®DOMãæŽæ°ããã³è¡šç€ºããããã³ã«åŒã³åºãããŸãã DOM APIãä»ããŠæŽæ°ããåŸã«ã¿ã¹ã¯ãå®è¡ããããã®å®è£
ãããšãã°ãèŠçŽ ã«çŠç¹ãåãããŸãã
- requestUpdateïŒnameãoldValueïŒ ïŒã¢ã€ãã ã®é忿޿°ãªã¯ãšã¹ããåŒã³åºããŸãã ããã¯ãããããã£ã®èšå®ãåå ã§ã¯ãªãäœããã®ç¶æ
ã«åºã¥ããŠã¢ã€ãã ãæŽæ°ããå¿
èŠããããšãã«åŒã³åºãå¿
èŠããããŸãã
- createRenderRootïŒïŒ ïŒããã©ã«ãã§ã¯ãã¢ã€ãã ã®ã·ã£ããŠã«ãŒããäœæããŸãã Shadow DOMã䜿çšããå¿
èŠããªãå Žåãã¡ãœããã¯
this
ãè¿ãå¿
èŠããããŸãã
ã¢ã€ãã ã®æŽæ°æ¹æ³ïŒ
- ããããã£ã«ã¯æ°ããå€ãäžããããŸãã
hasChanged(value, oldValue)
ãfalse
å Žåãã¢ã€ãã ã¯æŽæ°ãããŸããã ãã以å€ã®å Žåã requestUpdate()
åŒã³åºããŠæŽæ°ãèšç»ããŸãã- requestUpdateïŒïŒ ïŒ ãã€ã¯ãã¿ã¹ã¯ã®åŸïŒã€ãã³ãã«ãŒãã®æåŸã§ã次ã®åæç»ã®åïŒã«èŠçŽ ãæŽæ°ããŸãã
- performUpdateïŒïŒ ïŒæŽæ°ãé²è¡äžã§ãããæ®ãã®æŽæ°APIãç¶ç¶ããŸãã
- shouldUpdateïŒchangedPropertiesïŒ ïŒ
true
è¿ãããå ŽåãæŽæ°ãç¶è¡ããtrue
ã - firstUpdatedïŒchangedPropertiesïŒ ïŒã¢ã€ãã ãåããŠæŽæ°ããããšãã
updated()
åŒã³åºãçŽåã«åŒã³åºãupdated()
ãŸãã - updateïŒchangedPropertiesïŒ ïŒã¢ã€ãã ãæŽæ°ããŸãã ãã®ã¡ãœããã§ããããã£ã倿ŽããŠããå¥ã®æŽæ°ã¯çºçããŸããã
- renderïŒïŒ ïŒDOMã®èŠçŽ ãã¬ã³ããªã³ã°ããããã®
lit-html
ãã³ãã¬ãŒããè¿ããŸãã ãã®ã¡ãœããã§ããããã£ã倿ŽããŠããå¥ã®æŽæ°ã¯çºçããŸããã
- updatedïŒchangedPropertiesïŒ ïŒã¢ã€ãã ãæŽæ°ããããã³ã«åŒã³åºãããŸãã
ã³ã³ããŒãã³ãã®ã©ã€ããµã€ã¯ã«ã®ãã¹ãŠã®ãã¥ã¢ã³ã¹ãçè§£ããã«ã¯ã ããã¥ã¡ã³ããåç
§ããããšããå§ãããŸãã
ä»äºã§ã¯ãAdobe Experience ManagerïŒAEMïŒã®ãããžã§ã¯ãããããŸãããªãŒãµãªã³ã°ã§ã¯ããŠãŒã¶ãŒãã³ã³ããŒãã³ããããŒãžã«ãã©ãã°ã¢ã³ãããããã§ããŸããAEMã€ããªãã®ãŒã«ããã°ããã®ã³ã³ããŒãã³ãã«ã¯ããã®ã³ã³ããŒãã³ãã®ããžãã¯ãå®è£
ããããã«å¿
èŠãªãã¹ãŠãå«ãscript
ã¿ã°ãå«ãŸããŠããŸãã ãããå®éã«ã¯ããã®ã¢ãããŒãã¯å€ãã®ããããã³ã°ãªãœãŒã¹ãšãã®ã·ã¹ãã ã§ã®ããã³ãã®å®è£
ã«é¢ããå°é£ãåŒãèµ·ãããŸããã ããã³ããå®è£
ããããã«ãWebã³ã³ããŒãã³ãã¯ãµãŒããŒåŽã®ã¬ã³ããªã³ã°ã倿Žããªãæ¹æ³ãšããŠéžæããïŒéåžžã«ããŸããããŸããïŒãå€ãå®è£
ãæ°ããã¢ãããŒãã§ãããåäœã§ç©ããã«åŒ·åããŸããã ç§ã®æèŠã§ã¯ããã®ã·ã¹ãã ã®Webã³ã³ããŒãã³ãã®ããŒããå®è£
ããããã®ããã€ãã®ãªãã·ã§ã³ããããŸãïŒãã³ãã«ãåéããïŒéåžžã«å€§ãããªãå¯èœæ§ããããŸãïŒãããã£ã³ã¯ã«åå²ããïŒå€ãã®å°ããªãã¡ã€ã«ãåçããŒããå¿
èŠã§ãïŒããŸãã¯ããããã«ã¹ã¯ãªãããåã蟌ãçŸåšã®ã¢ãããŒãã䜿çšããŸããµãŒããŒåŽã§ã¬ã³ããªã³ã°ãããã³ã³ããŒãã³ãïŒç§ã¯æ¬åœã«ããã«æ»ããããããŸããïŒã ç§ã®æèŠã§ã¯ãæåãš3çªç®ã®ãªãã·ã§ã³ã¯ãªãã·ã§ã³ã§ã¯ãããŸããã 第äºã«ãã¹ãã³ã·ã«ã®ããã«ãåçããŒãããŒããŒãå¿
èŠã§ãã ãããããããã¯ã¹ãå
ã®ç
§æèŠçŽ ã®å Žåãããã¯æäŸãããŸããã lit-elementéçºè
åŽã§ãã€ãããã¯ããŒãããŒããŒãäœæããããšããŸããããããã¯å®éšã§ãããå®çšŒåç°å¢ã§ã®äœ¿çšã¯æšå¥šãããŠããŸããã ãŸããlit-elementéçºè
ããã¯ãWebã³ã³ããŒãã³ã仿§ãªããžããªã«ãããŒãžäžã®htmlããŒã¯ã¢ããã«åºã¥ããŠWebã³ã³ããŒãã³ãã«å¿
èŠãªjsãåçã«ããŒãããæ©èœã仿§ã«è¿œå ããææ¡ããããŸãã ãããŠãç§ã®æèŠã§ã¯ããã®ãã€ãã£ãããŒã«ã¯ãWebã³ã³ããŒãã³ãã®åäžã®åæåãã€ã³ããäœæãããµã€ãã®ãã¹ãŠã®ããŒãžã«åçŽã«è¿œå ã§ããéåžžã«åªããã¢ã€ãã¢ã§ãã
PolymerLabsã®ã¹ã¿ãããç
§æèŠçŽ ããŒã¹ã®Webã³ã³ããŒãã³ããåçã«èªã¿èŸŒãããã«ã åå²èŠçŽ ãéçºãããŸããã ããã¯å®éšçãªè§£æ±ºçã§ãã æ¬¡ã®ããã«æ©èœããŸãã
- SplitElementãäœæããã«ã¯ã2ã€ã®ã¢ãžã¥ãŒã«ã«2ã€ã®èŠçŽ å®çŸ©ãèšè¿°ããŸãã
- ãããã®1ã€ã¯ãèŠçŽ ã®èªã¿èŸŒãŸããéšåãå®çŸ©ãããã¹ã¿ããã§ããéåžžãããã¯ååãšããããã£ã§ãã ããããã£ã¯ãlit-elementãã¿ã€ã ãªãŒã«èгå¯å¯èœãªå±æ§ãçæããŠ
customElements.define()
ãåŒã³åºãããšãã§ããããã«ãã¹ã¿ãã§å®çŸ©ããå¿
èŠããããŸãã - ã¹ã¿ãã«ã¯ãå®è£
ã¯ã©ã¹ãè¿ãéçéåæããŒãã¡ãœãããå¿
èŠã§ãã
- å¥ã®ã¯ã©ã¹ã¯ãå®è£
ãã§ãä»ã®ãã¹ãŠãå«ãŸããŸãã
SplitElement
ã³ã³ã¹ãã©ã¯ã¿ãŒã¯å®è£
ã¯ã©ã¹ãããŒããã upgrade()
ãå®è¡ãupgrade()
ã
ã¹ã¿ãã®äŸïŒ
import {SplitElement, property} from '../split-element.js'; export class MyElement extends SplitElement {
å®è£
äŸïŒ
import {MyElement} from './my-element.js'; import {html} from '../split-element.js';
ES6ã§ã®SplitElementã®äŸïŒ
import {LitElement, html} from 'lit-element'; export * from 'lit-element';
ããŒã«ã¢ããã§äžèšã®ã¢ã»ã³ããªã䜿çšããŠããå Žåã¯ãåçã€ã³ããŒããåŠçã§ããããã«babelãèšå®ããŠãã ãã
npm install @babel/plugin-syntax-dynamic-import
.babelrcèšå®ã§è¿œå
{ "plugins": ["@babel/plugin-syntax-dynamic-import"] }
ããã§ãé
å»¶ããŒãã䜿çšããWebã³ã³ããŒãã³ãã®å®è£
ã®å°ããªäŸãäœæããŸãããhttps ïŒ //github.com/malay76a/elbrus-split-litelement-web-components
Webã³ã³ããŒãã³ãã®åçèªã¿èŸŒã¿ã®ã¢ãããŒããé©çšããããšããŸããããæ¬¡ã®çµè«ã«éããŸããïŒããŒã«ã¯éåžžã«æ©èœããŠãããããWebã³ã³ããŒãã³ãã®ãã¹ãŠã®å®çŸ©ã1ã€ã®ãã¡ã€ã«ã«åéããã³ã³ããŒãã³ãèªäœã®èª¬æãåå¥ã«ãã£ã³ã¯ã§æ¥ç¶ããå¿
èŠããããŸãã http2ããªããšããã®ã¢ãããŒãã¯æ©èœããŸããããªããªãã ã³ã³ããŒãã³ããèšè¿°ããå°ããªãã¡ã€ã«ã®éåžžã«å€§ããªããŒã«ã圢æãããŸãã ååèšèšã®ååã«åºã¥ããŠã ååã®ã€ã³ããŒãã¯ããã£ã§æ±ºå®ããå¿
èŠããããŸãããããã£ã¯å¥ã®ã³ã³ããŒãã³ããšããŠæ¢ã«æ¥ç¶ãããŠããŸãã ããã«ããã¯ã®1ã€ã¯ããŠãŒã¶ãŒããã©ãŠã¶ãŒã§ãŠãŒã¶ãŒèŠçŽ ã®å€ãã®å®çŸ©ãåãåããããããã©ãŠã¶ãŒã§äœããã®æ¹æ³ã§åæåãããåæç¶æ
ãæ±ºå®ãããããšã§ãã ãã®ãããªãœãªã¥ãŒã·ã§ã³ã¯åé·ã§ãã ã³ã³ããŒãã³ãããŒããŒã®ç°¡åãªãœãªã¥ãŒã·ã§ã³ã®ãªãã·ã§ã³ã®1ã€ã¯ã次ã®ã¢ã«ãŽãªãºã ã§ãã
- å¿
èŠãªãŠãŒãã£ãªãã£ãããŒãããŸãã
- ããªãã£ã«ã®ããŒãã
- ã©ã€ãDOMããã«ã¹ã¿ã èŠçŽ ãçµã¿ç«ãŠãŸãã
- ã¿ã°åã«ãã€ãã³ãå«ããã¹ãŠã®DOMèŠçŽ ãéžæãããŸã
- ãªã¹ãã¯ãã£ã«ã¿ãªã³ã°ããããªã¹ãã¯æåã®èŠçŽ ã§æ§æãããŸãã
- åä¿¡ãããŠãŒã¶ãŒèŠçŽ ã®ã«ãŒããéå§ããŸãã
- Intersection Observer,
- +- 100px import.
- 3 shadowDOM,
- , shadowDOM , , import JS.
- lit-element open-wc.org . webpack rollup, - storybook, IDE.
远å ã®ãªã³ã¯ïŒ
- Let's Build Web Components! Part 5: LitElement
- Web Component Essentials
- Lit-HTMLã詊ãå€...
- LitElement To Doã¢ããª
- LitElementã¢ããªãã¥ãŒããªã¢ã«ããŒã1ïŒã¯ããã«
- LitElementãã¥ãŒããªã¢ã«ããŒã2ïŒãã³ãã¬ãŒããããããã£ãã€ãã³ã
- LitElementãã¥ãŒããªã¢ã«ããŒã3ïŒReduxã«ããç¶æ
管ç
- LitElementãã¥ãŒããªã¢ã«ããŒã4ïŒããã²ãŒã·ã§ã³ãšã³ãŒãåå²
- LitElementãã¥ãŒããªã¢ã«ããŒã5ïŒPWAãšãªãã©ã€ã³
- Lit-htmlã¯ãŒã¯ã·ã§ãã
- çŽ æŽãããlit-html