рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд▓рд┐рдЯреНрд▓-рдПрд▓реАрдореЗрдВрдЯ рдФрд░ рд╡реЗрдм рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдирд╛

рдПрдХ рдмрд┐рдВрджреБ рдкрд░ рдореБрдЭреЗ рддрддреНрдХрд╛рд▓ рд╡реЗрдм рдШрдЯрдХреЛрдВ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдирд╛ рдкрдбрд╝рд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдорд┐рд▓ рдЧрдпрд╛ред рдореИрдВ рдЙрди рд▓реЗрдЦреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд▓рд┐рдЦрдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдБ рдЬреЛ рд╣реЛрдЧреА
рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд╡реЗрдм рдШрдЯрдХреЛрдВ, рд▓рд┐рдЯ-рдПрд▓рд┐рдореЗрдВрдЯ рдХрд╛ рдЬреНрдЮрд╛рди рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░реЗрдВ рдФрд░ рджреВрд╕рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрдХрдиреАрдХ рдХрд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдкрд░рд┐рдЪрдп рджреЗрдВред рдореИрдВ рдЗрд╕ рддрдХрдиреАрдХ рдХрд╛ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдирд╣реАрдВ рд╣реВрдВ рдФрд░ рдХрд┐рд╕реА рднреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рд╣рд░реНрд╖ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реВрдВрдЧрд╛ред


рдореВрд▓ рд╡реЗрдм рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЯ-рдПрд▓рд┐рдореЗрдВрдЯ рдПрдХ рд░реИрдкрд░ (рдореВрд▓ рдЯреЗрдореНрдкрд▓реЗрдЯ) рд╣реИред рдпрд╣ рдХрдИ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ рдирд╣реАрдВ рд╣реИрдВред рдореВрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреА рдирд┐рдХрдЯрддрд╛ рдХреЗ рдХрд╛рд░рдг, рдЕрдиреНрдп рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рд╡рд┐рднрд┐рдиреНрди рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдореЗрдВ рд▓рд┐рдЯ-рдПрд▓рд┐рдореЗрдВрдЯ рдмрд╣реБрдд рдЕрдЪреНрдЫреЗ рдкрд░рд┐рдгрд╛рдо рджрд┐рдЦрд╛рддрд╛ рд╣реИ (02/06/2019 рддрдХ)ред


рдмреЛрдирд╕ рдЬреЛ рдореИрдВ рд╡реЗрдм рдШрдЯрдХреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЯреНрд▓-рдПрд▓рд┐рдореЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рджреЗрдЦрддрд╛ рд╣реВрдВ:


  1. рдпрд╣ рддрдХрдиреАрдХ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рджреВрд╕рд░реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИ рдФрд░ "рдмрдЪрдкрди рдХреА рдмреАрдорд╛рд░рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдмреАрдорд╛рд░ рд╣реЛ рдЧрдИ", рдЬреЛ рдХрд┐ рдЕрднреА-рдЕрднреА рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдЬреАрдм рд╣реИрдВред
  2. рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЛ рдмрд╣реБрд▓рдХ, рдФрд░ рд╡реЗрдмрдкреИрдХ, рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ, рд░реЛрд▓рдЕрдк, рдЖрджрд┐ рджреЛрдиреЛрдВ рд╕реЗ рдмрд╛рд╣рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд╕реЗ рдЖрдк рдХрд┐рд╕реА рднреА рдЖрдзреБрдирд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рд▓рд┐рдЯ-рдПрд▓рд┐рдореЗрдВрдЯ рдХреЛ рдПрдореНрдмреЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
  3. рдЯрд╛рдЗрдк-рдПрд▓рд┐рдореЗрдВрдЯ рдореЗрдВ рдЯрд╛рдЗрдкрд┐рдВрдЧ, рдЖрд░рдВрдн рдХрд░рдиреЗ рдФрд░ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдПрдХ рдмрд╣реБрдд рд╣реА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдкреНрд░рдгрд╛рд▓реА рд╣реИред
  4. рдЬрд▓рд╛рдпрд╛-рддрддреНрд╡ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рдЧрднрдЧ рдПрдХ рд╣реА рддрд░реНрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддред рдпрд╣ рдмрд╣реБрдд рдиреНрдпреВрдирддрдо рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ - рдШрдЯрдХреЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдФрд░ рдЙрд╕рдХреЗ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдХрд▓ рдЯреЗрдореНрдкрд▓реЗрдЯ рдФрд░ рдПрдХ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдЪреБрдирдиреЗ рдореЗрдВ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рд╕реАрдорд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рд▓рд╛рдЗрдЯ-рдПрд▓рд┐рдореЗрдВрдЯ рдкрд░ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╡реЗрдм рдХрдВрдкреЛрдиреЗрдВрдЯ рдмрдирд╛рдПрдВред рдЪрд▓рд┐рдП рдкреНрд░рд▓реЗрдЦрди рдХреА рдУрд░ рдореБрдбрд╝рддреЗ рд╣реИрдВред рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:


  1. рд╣рдорд╛рд░реА рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдореЗрдВ рд▓рд┐рдЯ-рдПрд▓рд┐рдореЗрдВрдЯ рдХреЗ рд╕рд╛рде npm рдкреИрдХреЗрдЬ рдЬреЛрдбрд╝реЗрдВ

    npm install --save lit-element 
  2. рд╣рдорд╛рд░реЗ рдШрдЯрдХ рдмрдирд╛рдПрдБред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдорд╛рдп my-component рдЯреИрдЧ рдореЗрдВ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬреНрдб рд╡реЗрдм рдХрдВрдкреЛрдиреЗрдВрдЯ рдмрдирд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, js рдлрд╝рд╛рдЗрд▓ my-component.js Components.js рдмрдирд╛рдПрдБ рдФрд░ рдЗрд╕рдХреЗ рдореВрд▓ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ:


 //       lit-element import { } from ''; //      class MyComponent { } //      customElements.define(); 

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЕрдкрдиреЗ рдореВрд▓ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ:


 import { LitElement, html } from 'lit-element'; // LitElement -    ()   - // html -  lit-html,     ,  //    html    

рджреВрд╕рд░реЗ, LitElement рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрд╡рдпрдВ рд╡реЗрдм рдШрдЯрдХ LitElement


 //   ,    //  LitElement    HTMLElement class MyComponent extends LitElement { //    LitElement   //      constructor  connectedCallback //           //    ,       // shadowDOM   {mode: 'open'} render() { return html`<p>Hello World!</p>` } } 

рдФрд░ рдЖрдЦрд┐рд░реА рдЪреАрдЬ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд╡реЗрдм рдШрдЯрдХ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рд╣реИ


 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); 

рдпрджрд┐ рдЖрдк html рд╕реЗ my-component.js рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдмрд╛рд╣рд░ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╡рд╣реА рд╣реИред рд╕рдмрд╕реЗ рд╕рд░рд▓ рдШрдЯрдХ рддреИрдпрд╛рд░ рд╣реИред


рдореИрдВ рдкрд╣рд┐рдпрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рдордЬрдмреВрдд рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд░рдЦрддрд╛ рд╣реВрдВ рдФрд░ рдЬрд▓рд╛рдК-рддрддреНрд╡-рдмрд┐рд▓реНрдб-рд░реЛрд▓рдЕрдк рдХреА рд╕рдорд╛рдкреНрдд рд╡рд┐рдзрд╛рдирд╕рднрд╛ рд▓реЗрддрд╛ рд╣реВрдВред рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ:


 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 рдореЗрдВ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ, рддреЛ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рд╡реЗрдмрдХрдВрдкреНрдпреВрдЯрд░-рд▓реЛрдбрд░.рдЬреЗрдПрд╕ рд╕рдорд╛рдкрди рдЯреИрдЧ рдХреЗ рд╕рд╛рдордиреЗ рд╣реИред рдпрд╣ рд╡реЗрдм рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдкреЙрд▓реАрдлрд╝рд┐рд▓ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИ, рдФрд░ рд╡реЗрдм рдШрдЯрдХ рдХреЗ рдХреНрд░реЙрд╕-рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдпрд╣ рд╡рд╛рдВрдЫрдиреАрдп рд╣реИ рдХрд┐ рдпрд╣ рдкреЙрд▓реАрдлрд╝рд┐рд▓ рдореМрдЬреВрдж рд╣реИред рдЖрдЗрдП рдЙрди рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреА рддрд╛рд▓рд┐рдХрд╛ рджреЗрдЦреЗрдВ рдЬреЛ рд╡реЗрдм рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдорд╛рдирдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ EDGE рдЕрднреА рднреА рдорд╛рдирдХреЛрдВ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (рдореИрдВ IE11 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪреБрдк рд╣реВрдВ, рдЬрд┐рд╕реЗ рдЕрднреА рднреА рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред



рдЗрд╕ рдкреЙрд▓реАрдлрд╝рд┐рд▓ рдХреЗ рд▓рд┐рдП 2 рд╡рд┐рдХрд▓реНрдк рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП:


  1. рд╡реЗрдмрдХрдВрдкреНрдпреВрдЯрд░-рдмрдВрдбрд▓-рдЬреЗрдПрд╕ - рдЗрд╕ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдкреЙрд▓реАрдлрд┐рд▓ рдХреЗ рд▓рд┐рдП рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ, рд╡реЗ рд╕рднреА рдЖрд░рдВрдн рдХрд┐рдП рдЧрдП рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкреНрд░рддреНрдпреЗрдХ рдкреЙрд▓реАрдлрд╝рд┐рд▓ рдХреЗрд╡рд▓ рдЪрд┐рдиреНрд╣рд┐рдд рд╕рдВрдХреЗрддреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
  2. рд╡реЗрдмрдХрдВрдкреНрдпреВрдЯрд░-рд▓реЛрдбрд░.рдЬреЗрдПрд╕ рдПрдХ рдиреНрдпреВрдирддрдо рдмреВрдЯрд▓реЛрдбрд░ рд╣реИ рдЬреЛ рдХрд┐ рдкрд╣рдЪрд╛рдиреЗ рдЧрдП рд▓рдХреНрд╖рдгреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЖрд╡рд╢реНрдпрдХ рдкреЙрд▓реАрдлрд┐рд▓реНрд╕ рдХреЛ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ

рдореИрдВ рдЖрдкрдХреЛ рдПрдХ рдЕрдиреНрдп рдкреЙрд▓реАрдлрд╝рд┐рд▓ рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдХрд╣рддрд╛ рд╣реВрдВ - рдХрд╕реНрдЯрдо-рдПрд▓рд┐рдореЗрдВрдЯреНрд╕-рдПрд╕ 5-рдПрдбреЗрдкреНрдЯрд░.рдЬреЗрдПрд╕ ред рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдХреЗрд╡рд▓ рдИрдПрд╕ 6 рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рджреЗрд╢реА customElements.define рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП, ES6 рдХреЛрдб рдХреЛ рдХреЗрд╡рд▓ рдЙрди рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ ES5 рдмрд╛рдХреА рд╕рднреА рдХреЛред рдРрд╕рд╛ рдХрд░рдирд╛ рд╣рдореЗрд╢рд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдмреЗрд╣рддрд░ рдХреНрд░реЙрд╕-рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдВрдЧрддрддрд╛ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рд╕рднреА рдИрдПрд╕ 6 рдХреЛрдб рдХреЛ рдИрдПрд╕ 5 рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдПред рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, ES5 рдкрд░ рд╡реЗрдм рдШрдЯрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдВрдЧреЗред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрд╕реНрдЯрдо рдПрд▓рд┐рдореЗрдВрдЯреНрд╕- es5-adapter.js рд╣реИред


рдЕрдм ./src/my-element.js рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ


 import {html, LitElement, property} from 'lit-element'; class MyElement extends LitElement { // @property - ,    babel  ts //         //  ,   @property({type: String}) myProp = 'stuff'; render() { return html` <p>Hello World</p> ${this.myProp} `; } } customElements.define('my-element', MyElement); 

Lit-html рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рдЖрдкрдХреЛ рдХрдИ рд╡рд┐рдХрд▓реНрдк рджреВрдВрдЧрд╛:


 //  : html`<div>Hi</div>` // : html`<div>${this.disabled ? 'Off' : 'On'}</div>` // : html`<x-foo .bar="${this.bar}"></x-foo>` // : html`<div class="${this.color} special"></div>` //   boolean,  checked === false, //        HTML: html`<input type="checkbox" ?checked=${checked}>` //  : html`<button @click="${this._clickHandler}"></button>` 

рд░реЗрдВрдбрд░ () рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП рдпреБрдХреНрддрд┐рдпрд╛рдБ:


  • рдПрдХ рддрддреНрд╡ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрджрд▓рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рд┐рдП,
  • рджреБрд╖реНрдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП,
  • рдХреЗрд╡рд▓ рддрддреНрд╡ рдХреЗ рдЧреБрдгреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП,
  • рд╕рдорд╛рди рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкреНрд░реЗрд╖рд┐рдд рдХрд░рддреЗ рд╕рдордп рдЙрд╕реА рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд░реЗрдВрдбрд░ () рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрд╛рд╣рд░ DOM рдХреЛ рдЕрдкрдбреЗрдЯ рди рдХрд░реЗрдВред


рд▓рд┐рдЯ-рдПрдЪрдЯреАрдПрдордПрд▓ рд▓рд┐рдЯ-рдПрд▓рд┐рдореЗрдВрдЯ рдХреЛ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ - рдпрд╣ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ рд╡реЗрдм рдШрдЯрдХ рдХреЛ рдХреИрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред lit-html рдбреЛрдо рдХреЗ рдХреЗрд╡рд▓ рдЙрди рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдмрджрд▓рдХрд░ рддреЗрдЬреА рд╕реЗ рдЕрдкрдбреЗрдЯ рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред


рдЗрд╕ рдХреЛрдб рдХреЗ рд▓рдЧрднрдЧ рд╕рднреА рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдереЗ, рд▓реЗрдХрд┐рди @property рд▓рд┐рдП @property рдбреЗрдХреЛрд░реЗрдЯрд░ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ ред рдпрд╣ рдбреЗрдХреЛрд░реЗрдЯрд░ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЕрдкрдиреЗ my-element рдореЗрдВ myprop рдирд╛рдордХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрджрд┐ рдРрд╕реА рдХреЛрдИ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реЗрдЯ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдорд╛рди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ stuff рд╕реЗрдЯ рд╣реИред


 <!--  myProp  ,       -   'stuff' --> <my-element></my-element> <!--  myprop         lowerCamelCase .. myProp   -      'else' --> <my-element myprop="else"></my-element> 

property рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 2 рддрддреНрд╡ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:


  1. рдбреЗрдХреЛрд░реЗрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗред
  2. рдПрдХ рд╕реНрдерд┐рд░ рдЧрдЯрд░ properties рдорд╛рдзреНрдпрдо рд╕реЗред

рдкрд╣рд▓рд╛ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдЕрд▓рдЧ рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИ:


 @property({type: String}) prop1 = ''; @property({type: Number}) prop2 = 0; @property({type: Boolean}) prop3 = false; @property({type: Array}) prop4 = []; @property({type: Object}) prop5 = {}; 

рджреВрд╕рд░рд╛ рд╕рдм рдХреБрдЫ рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрджрд┐ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдореВрд▓реНрдп рд╣реИ, рддреЛ рдЙрд╕реЗ рдХрдХреНрд╖рд╛ рдирд┐рд░реНрдорд╛рдг рд╡рд┐рдзрд┐ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:


 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 = {}; } 

рд▓рд┐рдЯ-рдПрд▓рд┐рдореЗрдВрдЯ рдореЗрдВ рдЧреБрдгреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ рдХрд╛рдлреА рд╡реНрдпрд╛рдкрдХ рд╣реИ:


  • рд╡рд┐рд╢реЗрд╖рддрд╛ : рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдПрдХ рдЕрд╡рд▓реЛрдХрди рдпреЛрдЧреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛ рдмрди рд╕рдХрддреА рд╣реИ рдпрд╛ рдирд╣реАрдВред рдпрджрд┐ false , рддреЛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдЕрд╡рд▓реЛрдХрди рд╕реЗ рдмрд╛рд╣рд░ рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЧреЗрдЯрд░ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрджрд┐ true рдпрд╛ attribute рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реИ, рддреЛ рд▓реЛрдЕрд░рдореЗрдХреНрд╕реЗрд▓рдХреИрд╕реЗ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЧреЗрдЯреНрдЯрд░ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдВрдкрддреНрддрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде рдореЗрд▓ рдЦрд╛рдПрдЧреАред рдпрджрд┐ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреА рдЬрд╛рддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП my-prop , рддреЛ рдпрд╣ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕рдорд╛рди рдирд╛рдо рдХреЗ рд╕рд╛рде рдореЗрд▓ рдЦрд╛рдПрдЧрд╛ред
  • рдХрдирд╡рд░реНрдЯрд░ : рдЗрд╕рдореЗрдВ рдПрдХ рдореВрд▓реНрдп рдХреЛ / рд╕реЗ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ / рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рд╡рд░рдг рд╢рд╛рдорд┐рд▓ рд╣реИред рдорд╛рди рдПрдХ рдРрд╕рд╛ рдлрд╝рдВрдХреНрд╢рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдореВрд▓реНрдп рдХреЛ рдХреНрд░рдордмрджреНрдз рдФрд░ fromAttribute рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдпрд╛ рдпрд╣ fromAttribute рдФрд░ toAttribute рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЗрди рдХреБрдВрдЬрд┐рдпреЛрдВ рдореЗрдВ рдорд╛рдиреЛрдВ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╝рдВрдХреНрд╢рди рд╣реЛрддреЗ рд╣реИрдВред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рдЖрдзрд╛рд░ рдкреНрд░рдХрд╛рд░ рдХреЗ Boolean , String , Number , Object рдФрд░ Array рдореЗрдВ рд░реВрдкрд╛рдВрддрд░рдг рд╣реЛрддрд╛ рд╣реИред рд░реВрдкрд╛рдВрддрд░рдг рдирд┐рдпрдо рдпрд╣рд╛рдВ рд╕реВрдЪреАрдмрджреНрдз рд╣реИрдВ ред
  • рдкреНрд░рдХрд╛рд░ : рдЖрдзрд╛рд░ рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рдЧреБрдг рд╢рд╛рдорд┐рд▓ рд╣реЛрдЧрд╛ред рдпрд╣ рдХрдирд╡рд░реНрдЯрд░ рдХреЗ рд▓рд┐рдП "рд╕рдВрдХреЗрдд" рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
  • рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд : рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЧреБрдг рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП ( true ) рдФрд░ type рдФрд░ converter рд╕реЗ рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдмрджрд▓рд╛ рдЧрдпрд╛ред
  • hasChanged : рдкреНрд░рддреНрдпреЗрдХ рдЧреБрдг рдореЗрдВ рдпрд╣ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдкреБрд░рд╛рдиреЗ рдФрд░ рдирдП рдореВрд▓реНрдп рдХреЗ рдмреАрдЪ рдПрдХ рдкрд░рд┐рд╡рд░реНрддрди рд╣реИ, рдХреНрд░рдорд╢рдГ рдПрдХ Boolean рджреЗрддрд╛ рд╣реИред рдпрджрд┐ true , рддреЛ рдпрд╣ рдЖрдЗрдЯрдо рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИред
  • noAccessor : рдпрд╣ рдкреНрд░реЙрдкрд░реНрдЯреА Boolean рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреА рд╣реИ рдФрд░ false рдХреЛ рдбрд┐рдлреЙрд▓реНрдЯ рдХрд░рддреА рд╣реИред рдпрд╣ рдЧреЗрдЯрд░реНрд╕ рдХреА рдкреАрдврд╝реА рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХреНрд▓рд╛рд╕ рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдмрд╕рддрд╛ рд╣реИред рдпрд╣ рд░реВрдкрд╛рдВрддрд░рдг рдХреЛ рд░рджреНрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдЪрд▓реЛ рдПрдХ рдХрд╛рд▓реНрдкрдирд┐рдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддреЗ рд╣реИрдВ: рд╣рдо рдПрдХ рд╡реЗрдм рдШрдЯрдХ рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реЛрддрд╛ рд╣реИ, рдпрд╣ рд╢рдмреНрдж рд╕реНрдХреНрд░реАрди рдкрд░ рдЦреАрдВрдЪрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдЕрдХреНрд╖рд░ рдкрд┐рдЫрд▓реЗ рдПрдХ рд╕реЗ рдмрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИред


 <!-- index.html --> <ladder-of-letters letters=""></ladder-of-letters> 

 //ladder-of-letters.js import {html, LitElement, property} from 'lit-element'; class LadderOfLetters extends LitElement { @property({ type: Array, converter: { fromAttribute: (val) => { // console.log('in fromAttribute', val); return val.split(''); } }, hasChanged: (value, oldValue) => { if(value === undefined || oldValue === undefined) { return false; } // console.log('in hasChanged', value, oldValue.join('')); return value !== oldValue; }, reflect: true }) letters = []; changeLetter() { this.letters = ['','','','','']; } render() { // console.log('in render', this.letters); //    ,    //        return html` <div>${this.letters.map((i, idx) => html`<span style="font-size: ${idx + 2}em">${i}</span>`)}</div> // @click     ,     //   'click'    <button @click=${this.changeLetter}>  ''</button> `; } } customElements.define('ladder-of-letters', LadderOfLetters); 

рдЕрдВрдд рдореЗрдВ рд╣рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИ:



рдЬрдм рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдиреЗ рдкрд╣рд▓реЗ рдЪреЗрдХ рдХрд╛ рдХрд╛рд░рдг рдмрдирд╛, рдФрд░ рдлрд┐рд░ рд░рд┐рдбреНрд░рд╛рд╕реНрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рднреЗрдЬрд╛ рдЧрдпрд╛ред



рдФрд░ reflect рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдо HTML рдкрд░рд┐рд╡рд░реНрддрди рднреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ



рдпрджрд┐ рдЖрдк рдЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдЗрд╕ рд╡реЗрдм рдШрдЯрдХ рдХреЗ рдмрд╛рд╣рд░ рдХреЛрдб рдХреЗ рд╕рд╛рде рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рд╡реЗрдм рдШрдЯрдХ рдХреЗ рдПрдХ рд░реАрдбреНрд░рд╡ рдХрд╛ рднреА рдХрд╛рд░рдг рдмрдиреЗрдВрдЧреЗред


рдЕрдм рдШрдЯрдХ рдХреА рд╕реНрдЯрд╛рдЗрд▓рд┐рдВрдЧ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд▓рд╛рдЗрдЯ-рдПрд▓рд┐рдореЗрдВрдЯ рдХреЛ рд╕реНрдЯрд╛рдЗрд▓ рдХрд░рдиреЗ рдХреЗ 2 рддрд░реАрдХреЗ рд╣реИрдВ:


  1. рд░реЗрдВрдбрд░ рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ рд╕реНрдЯрд╛рдЗрд▓ рдЯреИрдЧ рдЬреЛрдбрд╝рдХрд░ рд╕реНрдЯрд╛рдЗрд▓рд┐рдВрдЧ

     render() { return html` <style> p { color: green; } </style> <p>Hello World</p> `; } 


  2. рд╕реНрдЯреИрдЯрд┐рдХ рдЧреЗрдЯреНрдЯрд░ 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 рд╕реЗ рдЕрдзрд┐рдХ рдХреА рд╕реНрдХреНрд░реАрди рдЪреМрдбрд╝рд╛рдИ рдХреЗ рд╕рд╛рде рд▓реЙрдЧ рдСрди рдХрд░рддрд╛ рд╣реИред



рдФрд░ рдпрд╣ рддрдм рд╣реИ рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ 400px рд╕реЗ рдХрдо рдХреА рдЪреМрдбрд╝рд╛рдИ рд╡рд╛рд▓реЗ рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рд╕рд╛рдЗрдЯ рдХрд╛ рджреМрд░рд╛ рдХрд┐рдпрд╛ред



рдореЗрд░реА рд░рд╛рдп: рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдХреЛрдИ рднреА рдкрд░реНрдпрд╛рдкреНрдд рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИ, рдЬрдм рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛, рдореЛрдмрд╛рдЗрд▓ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реЛ, рдЕрдЪрд╛рдирдХ 1920px рдХреА рд╕реНрдХреНрд░реАрди рдЪреМрдбрд╝рд╛рдИ рдХреЗ рд╕рд╛рде рдПрдХ рдкреВрд░реНрдг рдореЙрдирд┐рдЯрд░ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддрд╛ рд╣реИред рдШрдЯрдХреЛрдВ рдХреЗ рдЖрд▓рд╕реА рд▓реЛрдбрд┐рдВрдЧ рдХреЛ рдЗрд╕рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред рдирддреАрдЬрддрди, рд╣рдо рддреЗрдЬреА рд╕реЗ рдШрдЯрдХ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рд╕рд╛рде рдПрдХ рдмрд╣реБрдд рдЕрдиреБрдХреВрд▓рд┐рдд рдореЛрд░реНрдЪрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рдПрдХрдорд╛рддреНрд░ рд╕рдорд╕реНрдпрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдореЗрдВ рдХрдард┐рдирд╛рдИ рд╣реИред


рдЕрдм рдореИрдВ рдЬреНрд╡рд▓рдВрдд рддрддреНрд╡ рдХреЗ рдЬреАрд╡рди рдЪрдХреНрд░ рдХреЗ рддрд░реАрдХреЛрдВ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВ:


  • рд░реЗрдВрдбрд░ () : lit-html рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдбреЛрдо рддрддреНрд╡ рдХрд╛ рд╡рд┐рд╡рд░рдг рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, render рдлрд╝рдВрдХреНрд╢рди рдПрдХ рд╢реБрджреНрдз рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ рддрддреНрд╡ рдХреЗ рд╡рд░реНрддрдорд╛рди рдЧреБрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред render() рд╡рд┐рдзрд┐ рдХреЛ update() рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
  • shouldUpdate (рдмрджрд▓реА рдЧрдИ рд╡рд╕реНрддреБрдПрдВ) : рдпрджрд┐ рдЕрджреНрдпрддрди рдФрд░ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдм рдЧреБрдг рдмрджрд▓реЗ рдЧрдП рдереЗ рдпрд╛ requestUpdate() ред changedProperties рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рддрд░реНрдХ рдПрдХ Map рдЬрд┐рд╕рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдЧреБрдгреЛрдВ рдХреЗ рд▓рд┐рдП рдХреБрдВрдЬреА рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдпрд╣ рд╡рд┐рдзрд┐ рд╣рдореЗрд╢рд╛ true , рд▓реЗрдХрд┐рди рдШрдЯрдХ рдХреЗ рдЕрджреНрдпрддрди рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдзрд┐ рдХреЗ рддрд░реНрдХ рдХреЛ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
  • performUpdate () : рдЕрджреНрдпрддрди рд╕рдордп рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдиреБрд╕реВрдЪрдХ рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
  • рдЕрджреНрдпрддрди (рдмрджрд▓реА рдЧрдИ рд╕рд╛рдордЧреНрд░реА) : рдпрд╣ рддрд░реАрдХрд╛ render() рдХрд╣рддрд╛ рд╣реИред рдпрд╣ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдореВрд▓реНрдп рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдПрдХ рддрддреНрд╡ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рднреА рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЗ рдЕрдВрджрд░ рдЧреБрдг рд╕реЗрдЯ рдХрд░рдиреЗ рд╕реЗ рдХреЛрдИ рдЕрдиреНрдп рдЕрджреНрдпрддрди рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
  • firstUpdated (рдмрджрд▓реА рдЧрдИ рд╕рд╛рдордЧреНрд░реА) : updated() рдХреЙрд▓ рдХреЗ рддреБрд░рдВрдд рдкрд╣рд▓реЗ DOM рддрддреНрд╡ рдХреЗ рдкрд╣рд▓реЗ рдЕрджреНрдпрддрди рдХреЗ рдмрд╛рдж рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╡рд┐рдзрд┐ рджреГрд╢реНрдпрдорд╛рди рд╕реНрдерд┐рд░ рдиреЛрдбреНрд╕ рдХреЗ рд▓рд┐рдВрдХ рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬрд┐рд╕реЗ рдЖрдкрдХреЛ рд╕реАрдзреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, updated() ред
  • рдЕрдкрдбреЗрдЯреЗрдб (рдмрджрд▓рд╛ рд╣реБрдЖ рдкрд░рд┐рд╡рд░реНрддрди) : рдЬрдм рднреА рдХрд┐рд╕реА рдЖрдЗрдЯрдо рдХрд╛ рдбреЛрдо рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред DOM API рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рддрддреНрд╡ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдирд╛ред
  • requestUpdate (рдирд╛рдо, oldValue) : рдХрд┐рд╕реА рдЖрдЗрдЯрдо рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЕрджреНрдпрддрди рдЕрдиреБрд░реЛрдз рдХреЛ рдЖрдордВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рддрдм рдХрд╣рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рд╕рдВрдкрддреНрддрд┐ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░рдг рдХрд┐рд╕реА рд░рд╛рдЬреНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЖрдЗрдЯрдо рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
  • createRenderRoot () : рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЖрдЗрдЯрдо рдХреЗ рд▓рд┐рдП рд╢реИрдбреЛ рд░реВрдЯ рдмрдирд╛рддрд╛ рд╣реИред рдпрджрд┐ рд╢реИрдбреЛ рдбреЛрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╡рд┐рдзрд┐ рдХреЛ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рддрддреНрд╡ рдХреИрд╕реЗ рдЕрдкрдбреЗрдЯ рд╣реЛрддрд╛ рд╣реИ:


  • рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдПрдХ рдирдпрд╛ рдореВрд▓реНрдп рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  • рдпрджрд┐ hasChanged(value, oldValue) false , рддреЛ рдЖрдЗрдЯрдо рдЕрджреНрдпрддрди рдирд╣реАрдВ рд╣реИред рдЕрдиреНрдпрдерд╛, requestUpdate() рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдПрдХ рдЕрджреНрдпрддрди рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдЧрдИ рд╣реИред
  • requestUpdate () : microtask рдХреЗ рдмрд╛рдж рдПрд▓рд┐рдореЗрдВрдЯ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИ (рдИрд╡реЗрдВрдЯ рд▓реВрдк рдХреЗ рдЕрдВрдд рдореЗрдВ рдФрд░ рдЕрдЧрд▓реЗ рд░рд┐рдбреНрд░рд╛ рд╕реЗ рдкрд╣рд▓реЗ)ред
  • PerformUpdate () : рдЕрдкрдбреЗрдЯ рдЬрд╛рд░реА рд╣реИ, рдФрд░ рдмрд╛рдХреА рдЕрдкрдбреЗрдЯ API рдХреЗ рд╕рд╛рде рдЬрд╛рд░реА рд╣реИред
  • shouldUpdate (changeProperties) : рдпрджрд┐ true рд▓реМрдЯрд╛ true рддреЛ рдЕрдкрдбреЗрдЯ рдЬрд╛рд░реА рд░рд╣рддрд╛ true ред
  • FirstUpdated (рдмрджрд▓реА рдЧрдИ рд╡рд╕реНрддреБрдПрдВ) : рдкрд╣рд▓реА рдмрд╛рд░ updated() рдЬрд╛рдиреЗ рдкрд░, рдХреЙрд▓ updated() рд╕реЗ рдкрд╣рд▓реЗ updated() рд╣реЛрдиреЗ рдкрд░ рдХреЙрд▓ updated() ред
  • рдЕрджреНрдпрддрди (changeProperties) : рдЖрдЗрдЯрдо рдХреЛ рдЕрджреНрдпрддрди рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд╡рд┐рдзрд┐ рдореЗрдВ рдЧреБрдг рдмрджрд▓рдиреЗ рд╕реЗ рдЕрдиреНрдп рдЕрджреНрдпрддрди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
    • рд░реЗрдВрдбрд░ () : DOM рдореЗрдВ рдХрд┐рд╕реА рддрддреНрд╡ рдХреЛ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЯ- lit-html рдЯреЗрдореНрдкрд▓реЗрдЯ рджреЗрддрд╛ рд╣реИред рдЗрд╕ рд╡рд┐рдзрд┐ рдореЗрдВ рдЧреБрдг рдмрджрд▓рдиреЗ рд╕реЗ рдЕрдиреНрдп рдЕрджреНрдпрддрди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

  • рдЕрджреНрдпрддрд┐рдд (рдмрджрд▓реА рдЧрдИ рд╡рд╕реНрддреБрдПрдВ) : рдЬрдм рднреА рдХреЛрдИ рд╡рд╕реНрддреБ рдЕрдкрдбреЗрдЯ рдХреА рдЬрд╛рддреА рд╣реИ, рдЙрд╕реЗ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

рдШрдЯрдХ рдЬреАрд╡рди рдЪрдХреНрд░ рдХреА рд╕рднреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЖрдкрдХреЛ рдкреНрд░рд▓реЗрдЦрди рд╕реЗ рдкрд░рд╛рдорд░реНрд╢ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред


рдХрд╛рдо рдкрд░, рдореЗрд░реЗ рдкрд╛рд╕ рдПрдбреЛрдм рдЕрдиреБрднрд╡ рдкреНрд░рдмрдВрдзрдХ (рдПрдИрдПрдо) рдкрд░ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ, рдЗрд╕рдХреЗ рд╕рдВрд▓реЗрдЦрди рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреГрд╖реНрда рдкрд░ рдШрдЯрдХреЛрдВ рдХреЛ рдЦреАрдВрдЪ рдФрд░ рдЫреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдПрдИрдПрдо рд╡рд┐рдЪрд╛рд░рдзрд╛рд░рд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЗрд╕ рдШрдЯрдХ рдореЗрдВ рдПрдХ script рдЯреИрдЧ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╡рд╣ рд╕рдм рдХреБрдЫ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рдШрдЯрдХ рдХреЗ рддрд░реНрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдиреЗ рдЗрд╕ рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рд╕рд╛рдордиреЗ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдХрдИ рдЕрд╡рд░реБрджреНрдз рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдФрд░ рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХреЛ рдЬрдиреНрдо рджрд┐рдпрд╛ред рдореЛрд░реНрдЪреЗ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡реЗрдм рдШрдЯрдХреЛрдВ рдХреЛ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рд░реЗрдВрдбрд░рд┐рдВрдЧ (рдЬреЛ рдЙрдиреНрд╣реЛрдВрдиреЗ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд┐рдпрд╛ рдерд╛) рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛, рд╕рд╛рде рд╣реА рдкреБрд░рд╛рдиреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдПрдХ рдирдП рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдзреАрд░реЗ рд╕реЗ, рдмрд┐рдЯрд╡рд╛рдЗрдЬрд╝ рдХреЛ рд╕рдореГрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдЗрд╕ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд▓рд┐рдП рд╡реЗрдм рдШрдЯрдХреЛрдВ рдХреЗ рд▓реЛрдбрд┐рдВрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ: рдПрдХ рдмрдВрдбрд▓ рдЗрдХрдЯреНрдард╛ рдХрд░реЗрдВ (рдпрд╣ рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ) рдпрд╛ рдЗрд╕реЗ рд╡рд┐рдЦрдВрдбреВ рдореЗрдВ рддреЛрдбрд╝ рджреЗрдВ (рдмрд╣реБрдд рдЫреЛрдЯреА рдлрд╛рдЗрд▓реЗрдВ, рдЧрддрд┐рд╢реАрд▓ рд▓реЛрдбрд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ), рдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рд╡рд░реНрддрдорд╛рди рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдПрдХ рдШрдЯрдХ рдЬреЛ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдкрд░ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдкрд░ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдЬрд╛рдирд╛ рдЪрд╛рд╣рддрд╛)ред рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдкрд╣рд▓рд╛ рдФрд░ рддреАрд╕рд░рд╛ рд╡рд┐рдХрд▓реНрдк рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИред рджреВрд╕рд░реЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕реНрдЯреИрдВрд╕рд┐рд▓ рдХреА рддрд░рд╣ рдПрдХ рдЧрддрд┐рд╢реАрд▓ рдмреВрдЯрд▓реЛрдбрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд▓реЗрдХрд┐рди "рдмреЙрдХреНрд╕" рдореЗрдВ рд▓рд┐рдЯ-рдПрд▓рд┐рдореЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдпрд╣ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдбрд╛рдпрдирд╛рдорд┐рдХ рд▓реЛрдбрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЯ-рдПрд▓рд┐рдореЗрдВрдЯ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреА рдУрд░ рд╕реЗ рдПрдХ рдкреНрд░рдпрд╛рд╕ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдкреНрд░рдпреЛрдЧ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИред рд╕рд╛рде рд╣реА рд▓рд┐рдЯ-рдПрд▓рд┐рдореЗрдВрдЯ рдбреЗрд╡реЗрд▓рдкрд░реНрд╕ рд╕реЗ рд╡реЗрдм рдШрдЯрдХреЛрдВ рдХреЗ рд╕реНрдкреЗрд╕рд┐рдлрд┐рдХреЗрд╢рди рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдХрд┐ рдкреЗрдЬ рдкрд░ html рдорд╛рд░реНрдХрдЕрдк рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡реЗрдм рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдЬреЗрдПрд╕ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИред рдФрд░, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдпрд╣ рдореВрд▓ рдЙрдкрдХрд░рдг рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рд╡реЗрдм рдШрдЯрдХреЛрдВ рдХреЗ рдкреНрд░рд╛рд░рдВрдн рдХреЗ рдПрдХ рдмрд┐рдВрджреБ рдХреЛ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ рдФрд░ рдЗрд╕реЗ рд╕рд╛рдЗрдЯ рдХреЗ рд╕рднреА рдкреГрд╖реНрдареЛрдВ рдкрд░ рдЬреЛрдбрд╝ рджреЗрдЧрд╛ред


рдкреЙрд▓рд┐рдорд░рд▓реИрдмреНрд╕ рдХреЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЬрд▓рд╛рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рддрддреНрд╡ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд┐рднрд╛рдЬрди-рддрддреНрд╡ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ рдПрдХ рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рд╕рдорд╛рдзрд╛рди рд╣реИред рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:


  • рд╕реНрдкреНрд▓рд┐рдЯрдЗрдореЗрдВрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рджреЛ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рджреЛ рддрддреНрд╡ рдкрд░рд┐рднрд╛рд╖рд╛рдПрдБ рд▓рд┐рдЦрддреЗ рд╣реИрдВред
  • рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рд╕реНрдЯрдм рд╣реИ, рдЬреЛ рдПрдХ рддрддреНрд╡ рдХреЗ рд▓реЛрдб рдХрд┐рдП рдЧрдП рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ: рдЖрдорддреМрд░ рдкрд░ рдпрд╣ рдирд╛рдо рдФрд░ рдЧреБрдг рд╣реИрдВред рдЧреБрдгреЛрдВ рдХреЛ рдПрдХ рд╕реНрдЯрдм рдХреЗ рд╕рд╛рде рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рд▓рд┐рдЯ-рдПрд▓рд┐рдореЗрдВрдЯ рдХреЛ customElements.define() рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордпрдмрджреНрдз рддрд░реАрдХреЗ рд╕реЗ рдЕрд╡рд▓реЛрдХрдиреАрдп рдЧреБрдг рдЙрддреНрдкрдиреНрди рд╣реЛ customElements.define() ред
  • рд╕реНрдЯрдм рдореЗрдВ рдПрдХ рд╕реНрдерд┐рд░ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд▓реЛрдб рд╡рд┐рдзрд┐ рднреА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдЬреЛ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд░реНрдЧ рд▓реМрдЯрд╛рддреА рд╣реИред
  • рдПрдХ рдЕрдиреНрдп рд╡рд░реНрдЧ "рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди" рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рд╢рд╛рдорд┐рд▓ рд╣реИред
  • SplitElement рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд░реНрдЧ рдХреЛ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ рдФрд░ upgrade() рдЪрд▓рд╛рддрд╛ рд╣реИред

рдареВрдВрда рдЙрджрд╛рд╣рд░рдг:


 import {SplitElement, property} from '../split-element.js'; export class MyElement extends SplitElement { // MyElement    load   //      connectedCallback()   static async load() { //        //      MyElement return (await import('./my-element-impl.js')).MyElementImpl; } //      //   - @property() message: string; } customElements.define('my-element', MyElement); 

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЙрджрд╛рд╣рд░рдг:


 import {MyElement} from './my-element.js'; import {html} from '../split-element.js'; // MyElementImpl  render    - export class MyElementImpl extends MyElement { render() { return html` <h1>I've been upgraded</h1> My message is ${this.message}. `; } } 

ES6 рдкрд░ рднрд╛рдЬрд┐рдд рдЙрджрд╛рд╣рд░рдг


 import {LitElement, html} from 'lit-element'; export * from 'lit-element'; //    LitElement  SplitElement //       export class SplitElement extends LitElement { static load; static _resolveLoaded; static _rejectLoaded; static _loadedPromise; static implClass; static loaded() { if (!this.hasOwnProperty('_loadedPromise')) { this._loadedPromise = new Promise((resolve, reject) => { this._resolveLoaded = resolve; this._rejectLoaded = reject; }); } return this._loadedPromise; } //      - //      static _upgrade(element, klass) { SplitElement._upgradingElement = element; Object.setPrototypeOf(element, klass.prototype); new klass(); SplitElement._upgradingElement = undefined; element.requestUpdate(); if (element.isConnected) { element.connectedCallback(); } } static _upgradingElement; constructor() { if (SplitElement._upgradingElement !== undefined) { return SplitElement._upgradingElement; } super(); const ctor = this.constructor; if (ctor.hasOwnProperty('implClass')) { //   ,   ctor._upgrade(this, ctor.implClass); } else { //    if (typeof ctor.load !== 'function') { throw new Error('A SplitElement must have a static `load` method'); } (async () => { ctor.implClass = await ctor.load(); ctor._upgrade(this, ctor.implClass); })(); } } //       render() { return html``; } } 

рдпрджрд┐ рдЖрдк рдЕрднреА рднреА рд░реЛрд▓рдЕрдк рдкрд░ рдКрдкрд░ рджрд┐рдП рдЧрдП рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЧрддрд┐рд╢реАрд▓ рдЖрдпрд╛рдд рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдмреИрдмреЗрд▓ рд╕реЗрдЯ рдХрд░реЗрдВ


 npm install @babel/plugin-syntax-dynamic-import 

рдФрд░ .babelrc рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ


 { "plugins": ["@babel/plugin-syntax-dynamic-import"] } 

рдпрд╣рд╛рдВ рдореИрдВрдиреЗ рд╡рд┐рд▓рдВрдмрд┐рдд рд▓реЛрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╡реЗрдм рдШрдЯрдХреЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛: https://github.com/malay76a/elbrus-split-litelement-web-compenders


рдореИрдВрдиреЗ рд╡реЗрдм рдШрдЯрдХреЛрдВ рдХреЗ рдЧрддрд┐рд╢реАрд▓ рд▓реЛрдбрд┐рдВрдЧ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ рдЖрдпрд╛: рдЙрдкрдХрд░рдг рдХрд╛рдлреА рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЖрдкрдХреЛ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╡реЗрдм рдШрдЯрдХреЛрдВ рдХреА рд╕рднреА рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдШрдЯрдХ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд┐рдЦрдВрдбреВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВред Http2 рдХреЗ рдмрд┐рдирд╛, рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдШрдЯрдХреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реА рдЫреЛрдЯреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдПрдХ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдкреВрд▓ рдмрдирддрд╛ рд╣реИред рдкрд░рдорд╛рдгреБ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдкрд░рдорд╛рдгреБрдУрдВ рдХреЗ рдЖрдпрд╛рдд рдХреЛ рд╢рд░реАрд░ рдореЗрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рд╢рд░реАрд░ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдЕрд▓рдЧ рдШрдЯрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдбрд╝рдЪрдиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрддреНрд╡реЛрдВ рдХреА рдмрд╣реБрдд рд╕рд╛рд░реА рдкрд░рд┐рднрд╛рд╖рд╛рдПрдВ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдВрдЧреА рдЬреЛ рдХрд┐ рдПрдХ рддрд░рд╣ рд╕реЗ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд╢реБрд░реВ рдХреА рдЬрд╛рдПрдВрдЧреА рдФрд░ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЬрд╛рдПрдЧреАред рдРрд╕рд╛ рд╕рдорд╛рдзрд╛рди рдирд┐рд░рд░реНрдердХ рд╣реИред рдШрдЯрдХ рд▓реЛрдбрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдирд┐рдореНрди рдПрд▓реНрдЧреЛрд░рд┐рдердо рд╣реИ:


  1. рд▓реЛрдб рдЖрд╡рд╢реНрдпрдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ,
  2. рдкреЙрд▓реАрдлрд╝рд┐рд▓ рд▓реЛрдб рдХрд░реЗрдВ,
  3. рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреЛ рдкреНрд░рдХрд╛рд╢ рдбреЛрдо рд╕реЗ рдЗрдХрдЯреНрдард╛ рдХрд░реЗрдВ:
    1. рдЯреИрдЧ рдирд╛рдо рдореЗрдВ рд╣рд╛рдЗрдлрд╝рди рд╡рд╛рд▓реЗ рд╕рднреА DOM рддрддреНрд╡реЛрдВ рдХреЛ рдЪреБрдирд╛ рдЧрдпрд╛ рд╣реИ
    2. рд╕реВрдЪреА рдлрд╝рд┐рд▓реНрдЯрд░ рдХреА рдЧрдИ рд╣реИ рдФрд░ рдПрдХ рд╕реВрдЪреА рдкрд╣рд▓реЗ рддрддреНрд╡реЛрдВ рд╕реЗ рдмрдиреА рд╣реИред
  4. :
    1. Intersection Observer,
    2. +- 100px import.
    1. 3 shadowDOM,
    2. , shadowDOM , , import JS.


- lit-element open-wc.org . webpack rollup, - storybook, IDE.


:


  1. Let's Build Web Components! Part 5: LitElement
  2. Web Component Essentials
  3. A night experimenting with Lit-HTMLтАж
  4. LitElement To Do App
  5. LitElement app tutorial part 1: Getting started
  6. LitElement tutorial part 2: Templating, properties, and events
  7. LitElement tutorial part 3: State management with Redux
  8. LitElement tutorial part 4: Navigation and code splitting
  9. LitElement tutorial part 5: PWA and offline
  10. Lit-html workshop
  11. Awesome lit-html

Source: https://habr.com/ru/post/hi445438/


All Articles