рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрдм рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рдПрдЧрд╛?

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

рдПрдХ рдврд╛рдВрдЪрд╛ рдХреНрдпрд╛ рд╣реИ?


рдпрджрд┐ рдЖрдк рд╡рд┐рд╡рд░рдг рдореЗрдВ рдЬрд╛рдП рдмрд┐рдирд╛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЙрдкрдХрд░рдг рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЬрдЯрд┐рд▓ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдПрдХрд▓ рдкреГрд╖реНрда рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ (рдПрд╕рдкреАрдП) рдореЗрдВред

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

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

  • рд░рд╛рдЬреНрдп рдХрд╛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдФрд░ рдЖрд╡реЗрджрди рдХреА рджреГрд╢реНрдп рдкреНрд░рд╕реНрддреБрддрд┐ред
  • рд░реВрдЯрд┐рдВрдЧред
  • рдЦрд╛рдХрд╛ рдкреНрд░рдгрд╛рд▓реАред
  • рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдШрдЯрдХред

рдХреНрдпрд╛ рдЖрдзреБрдирд┐рдХ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд▓рд┐рдП рд░реВрдкрд░реЗрдЦрд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ?


рдЗрд╕ рдЦрдВрдб рдХреЗ рд╢реАрд░реНрд╖рдХ рдореЗрдВ рдкреВрдЫреЗ рдЧрдП рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреА "рдЖрд╡рд╢реНрдпрдХрддрд╛" рдХреЗ рд╡рд┐рдЪрд╛рд░ рд╕реЗ рдХреИрд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВред рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдХрдИ рд▓реЛрдЧ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗрдм рдбреЗрд╡рд▓рдкрд░ рдЯреВрд▓рдХрд┐рдЯ рдореЗрдВ рдлреНрд░рдВрдЯ-рдПрдВрдб рдлреНрд░реЗрдорд╡рд░реНрдХ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдХрднреА рднреА рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИрдВред рдпрджреНрдпрдкрд┐ рдпрд╣ рдирд┐рд░реНрд╡рд┐рд╡рд╛рдж рд╣реИ рдХрд┐ рдпреЗ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рдЙрдкрдХрд░рдг рд╣реИрдВред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкреНрд░рд╢реНрди рдХрд╛ рд╕реБрдзрд╛рд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: "рдХреНрдпрд╛ рдлреНрд░реЗрдорд╡рд░реНрдХ" рдЖрдзреБрдирд┐рдХ jQuery рд▓рд╛рдЗрдмреНрд░реЗрд░реА "рдХрд╛ рдПрдХ рд╕рд╛ рд╣реИ? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЬреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдПрдкреАрдЖрдИ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рдирд┐рдкрдЯрд╛рди рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдП рдереЗ, рдХреНрдпрд╛ рд╡реЗ рдЙрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдЬреЛ рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рд╕реЗ рд╣реИрдВ? тАЭ


jQuery

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕ рд╕рд╡рд╛рд▓ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдпрд╣ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╡рд┐рдХрд╛рд╕, рдирд┐рд░реНрдорд╛рдг рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╡реЗрдм рдШрдЯрдХреЛрдВ рдФрд░ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпреЛрдВ рдиреЗ рдПрд╕рдкреАрдП рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЛ рдмрд┐рдирд╛ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рдЖрд╕рд╛рди рдмрдирд╛ рджрд┐рдпрд╛ рд╣реИред

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

рдЙрд╕реА рд╕рдордп, рдЬреИрд╕реЗ рд╣реА рдореИрдВрдиреЗ рд╢реБрд░реБрдЖрддреА рдмрд╛рдзрд╛рдУрдВ рд╕реЗ рдирд┐рдкрдЯрд╛, рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реБрдЖ рдХрд┐ рд╢реБрджреНрдз рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдПрдХ-рдкреЗрдЬ рдХрд╛ рдЖрд╡реЗрджрди рдмрдирд╛рдирд╛ рдХрд┐рддрдирд╛ рдЖрд╕рд╛рди рд╣реИред

рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЕрд╡рд▓реЛрдХрди


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


рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реЛрдордкреЗрдЬ


рдкрдХрд╛рдиреЗ рдХреА рд╡рд┐рдзрд┐ рд░рд┐рдХреЙрд░реНрдб рдкреГрд╖реНрда

рд╡реЗрдм рдШрдЯрдХ


- тАФ . , , HTMLElement ( HTMLParagraphElement, ) .

, - , , connectedCallback, disconnectedCallback, attributeChangedCallback.

recipe-item, .

import template from './recipe.html'
import DATA_SERVICE from '../../utils/data'
export default class Recipe extends HTMLElement {
  constructor () {
    //   DOM,    recipe  DATA_SERVICE()
    super()
    this._shadowRoot = this.attachShadow({ mode: 'open' })
    this._recipe = null
    this.ds = new DATA_SERVICE()
  }
  connectedCallback () {
    //    html-  
    this._shadowRoot.innerHTML = template
    //   delete   
    this._shadowRoot
      .querySelector('.delete')
      .addEventListener('click', () => this._delete())
  }
  _render (title) {
    //      ,   
    this._shadowRoot.querySelector('.recipe-title').innerHTML = title
    this._shadowRoot.querySelector('.favorite').innerHTML = this._recipe
      .favorite
      ? 'Unfavorite'
      : 'Favorite'
  }
  _delete () {
    //       
    try {
      await this.ds.deleteRecipe(this._recipe.id)
    } catch (e) {
      console.error(e)
      alert(
        'Sorry, there was a problem deleting the recipe. Please, try again.'
      )
    }
  }
  get recipe () {
    //   
    return this._recipe
  }
  set recipe (recipe = {}) {
    //   ,   render
    this._recipe = recipe
    this._render(this._recipe.title)
  }
}

window.customElements.define('recipe-item', Recipe)


. , , .

, , npm- Vanilla JS Router. , API History, , - 100 . , - , (route guard).

import './components/error/error'
import content404 from './components/404/404.html'
import DATA_SERVICE from './utils/data'
const ds = new DATA_SERVICE()
//  ,  SPA
const $el = document.getElementById('app')

//  
const home = async () => {
  await import('./components/recipe/recipe')
  await import('./components/recipe-list/recipe-list')
  await import('./components/modal/modal.js')
  $el.innerHTML = `<recipe-list></recipe-list>`
}

const create = async () => {
  await import('./components/create-recipe/create-recipe')
  $el.innerHTML = `<create-recipe></create-recipe>`
}

const edit = async () => {
  await import('./components/edit-recipe/edit-recipe')
  $el.innerHTML = `<edit-recipe></edit-recipe>`
}

const error404 = async () => {
  $el.innerHTML = content404
}

//     
//    id     
const routes = {
  '/': home,
  '/create': create,
  '/error': error404,
  '/edit': async function (params) {
    const id = params.get('id')
    const recipe = await ds.getRecipe(id)
    await edit()
    $el.querySelector('edit-recipe').recipe = recipe
  }
}

//   onpopstate    URL    
//       -   /error
window.onpopstate = async () => {
  const url = new URL(
    window.location.pathname + window.location.search,
    window.location.origin
  )
  if (routes[window.location.pathname]) {
    await routes[window.location.pathname](url.searchParams)
  } else routes['/error']()
}
//     
let onNavItemClick = async pathName => {
  const url = new URL(pathName, window.location.origin)
  const params = url.searchParams
  if (routes[url.pathname]) {
    window.history.pushState({}, pathName, window.location.origin + pathName)
    await routes[url.pathname](params)
  } else {
    window.history.pushState({}, '404', window.location.origin + '/404')
    routes['/error']()
  }
}

//        
;(async () => {
  const url = new URL(
    window.location.pathname + window.location.search,
    window.location.origin
  )
  if (routes[window.location.pathname]) {
    await routes[window.location.pathname](url.searchParams)
  } else routes['/error']()
})()

//     onNavItemClick()
const router = {
  onNavItemClick,
  routes
}
export { router }

, . , , , тАФ .

JS


, , . , JS-.


тЦН


-, , , , . , - Fronteers Conference 2011. . . , HTML- , .

тЦН


-. , тАФ skatejs ssr web-component-tester. . , -, .

тЦН



querySelector()

- , , . Angular .

, тАФ . , , , .

тЦН Shadow DOM


Shadow DOM. . тАФ , . , , , , , - . , . , , .

тЦН DOM


Angular React , DOM. , . Angular University: ┬лAngular DOM, , HTML- ┬╗.

Angular, , jQuery, DOM. , HTML-, , DOM, . , HTML-. Virtual DOM , , .

JS . .


тЦН


-, JS, ( ┬л┬╗) , , . , , , Angular-.


Angular-


,

тЦН


- CLI, , , . , , -. , , , , , , .

тЦН


, , . . тАФ . , , , , , . , , , , DOM. .

, React Angular, , . . , - React shouldUpdate() onPush Angular.

тЦН


тАФ . , . . , , , . , .


Parcel. , , Webpack, , , , , Parcel , .

React, Vue Angular . ┬л┬╗. , React ┬л┬╗, Vue тАФ ┬л ┬╗.

Stencil Polymer? , , , , - , . , . , -.

, SPA - . , , , .

?


, - , , ┬л ┬╗. , , , , , , . , , , , .

, тАФ , , . ┬л ┬╗ . , , . , , , -.

, , , , , , , . тАФ . , , , . тАФ , -, , jQuery, .


, - . - , . , , - , .

- . , , , .

! -, ?

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


All Articles