React: RFC: рд░рд┐рдПрдХреНрдЯ 18 рдореЗрдВ рдХрд╕реНрдЯрдо рддрддреНрд╡ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ/рдЧреБрдгреЛрдВ рдХреЗ рд▓рд┐рдП рдпреЛрдЬрдирд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 24 рдЕрдХреНрддреВре░ 2017  ┬╖  129рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: facebook/react

рдпрд╣ #7249 рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╡рд┐рднрд┐рдиреНрди рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреЗ рдкреЗрд╢реЗрд╡рд░реЛрдВ рдФрд░ рд╡рд┐рдкрдХреНрд╖реЛрдВ рдХреА рд░реВрдкрд░реЗрдЦрд╛ рддреИрдпрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рд░рд┐рдПрдХреНрдЯ рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдкрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдФрд░ рдЧреБрдгреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдЯреАрдУрд╕реА/рд╕рд╛рд░рд╛рдВрд╢

  • рдкреГрд╖реНрдарднреВрдорд┐
  • рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ

    • рд╡рд┐рдХрд▓реНрдк 1: рдХреЗрд╡рд▓ рдЧреБрдг рд╕реЗрдЯ рдХрд░реЗрдВ

    • рдкреЗрд╢реЗрд╡рд░реЛрдВ



      • рд╕рдордЭрдиреЗ рдореЗрдВ рдЖрд╕рд╛рди/рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


      • рднрд╡рд┐рд╖реНрдп рдХреА рд╡реИрд╢реНрд╡рд┐рдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рд╕реЗ рдмрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИ


      • рдХрд╕реНрдЯрдо рддрддреНрд╡ "рдЕрдкрдЧреНрд░реЗрдб" рдХрд╛ рд▓рд╛рдн рдЙрдард╛рддрд╛ рд╣реИ


      • рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдШрдЯрдХ рдХреА рддрд░рд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ



    • рджреЛрд╖



      • рд╢рд╛рдпрдж рдПрдХ рддреЛрдбрд╝рдиреЗ рд╡рд╛рд▓рд╛ рдмрджрд▓рд╛рд╡


      • рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░реЗрдлрд░реА рдЪрд╛рд╣рд┐рдП


      • рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛



    • рд╡рд┐рдХрд▓реНрдк 2: рдЧреБрдг-рдЕрдЧрд░-рдЙрдкрд▓рдмреНрдз

    • рдкреЗрд╢реЗрд╡рд░реЛрдВ



      • рдЧреИрд░-рддреЛрдбрд╝рдиреЗ рд╡рд╛рд▓рд╛ рдкрд░рд┐рд╡рд░реНрддрди



    • рджреЛрд╖



      • рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЕрдиреБрдорд╛рдиреА рдХреЛ рд╕рдордЭрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ


      • рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдкрд░ рд╡рд╛рдкрд╕ рдЖрдирд╛ рднрд╡рд┐рд╖реНрдп рдХреЗ рдЧреНрд▓реЛрдмрд▓реНрд╕ рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рдХрд░ рд╕рдХрддрд╛ рд╣реИ



    • рд╡рд┐рдХрд▓реНрдк 3: рдПрдХ рд╕рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдЧреБрдгреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░реЗрдВ

    • рдкреЗрд╢реЗрд╡рд░реЛрдВ



      • рдиреЙрди-рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдЬрд┐рд╕реЗ рдбреЗрд╡рд▓рдкрд░ рдСрдкреНрдЯ-рдЗрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ


      • рдЗрд╕реА рддрд░рд╣ рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ/рдЧреБрдгреЛрдВ рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рддреЗ рд╣реИрдВ


      • рдкреНрд░рдгрд╛рд▓реА рд╕реНрдкрд╖реНрдЯ рд╣реИ



    • рджреЛрд╖



      • рдпрд╣ рдирдпрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣реИ


      • рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛



    • рд╡рд┐рдХрд▓реНрдк 4: рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд╕реНрддреБ рдЬреЛрдбрд╝реЗрдВ

    • рдкреЗрд╢реЗрд╡рд░реЛрдВ



      • рдкреНрд░рдгрд╛рд▓реА рд╕реНрдкрд╖реНрдЯ рд╣реИ


      • рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рднреА рд╣рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИ



    • рджреЛрд╖



      • рдпрд╣ рдирдпрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣реИ


      • рдпрд╣ рдПрдХ рддреЛрдбрд╝рдиреЗ рд╡рд╛рд▓рд╛ рдмрджрд▓рд╛рд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ


      • рдпрд╣ рдкрд┐рдЫрд▓реЗ рдХрд┐рд╕реА рднреА рдкреНрд░рд╕реНрддрд╛рд╡ рд╕реЗ рдмрдбрд╝рд╛ рдмрджрд▓рд╛рд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ



    • рд╡рд┐рдХрд▓реНрдк 5: рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдкреАрдЖрдИ

    • рдкреЗрд╢реЗрд╡рд░реЛрдВ



      • рдкреНрд░рдгрд╛рд▓реА рд╕реНрдкрд╖реНрдЯ рд╣реИ


      • рдЧреИрд░-рддреЛрдбрд╝рдиреЗ рд╡рд╛рд▓рд╛ рдкрд░рд┐рд╡рд░реНрддрди


      • рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрд╣рд╛рд╡рд░реЗрджрд╛рд░



    • рджреЛрд╖



      • рдПрдХ рдЬрдЯрд┐рд▓ рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХрд╛рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИ


      • рдмрдВрдбрд▓ рдХрд╛ рдЖрдХрд╛рд░ рдлреВрд▓ рд╕рдХрддрд╛ рд╣реИ


      • рдХреЙрдиреНрдлрд┐рдЧ рдХреЛ рдШрдЯрдХ рдХреЗ рд╕рд╛рде рддрд╛рд▓рдореЗрд▓ рд░рдЦрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ



рдкреГрд╖реНрдарднреВрдорд┐

рдЬрдм рд░рд┐рдПрдХреНрдЯ рдПрдХ рдХрд╕реНрдЯрдо рддрддреНрд╡ рдХреЛ рдбреЗрдЯрд╛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ рддреЛ рд╡рд╣ рд╣рдореЗрд╢рд╛ HTML рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдРрд╕рд╛ рдХрд░рддрд╛ рд╣реИред

<x-foo bar={baz}> // same as setAttribute('bar', baz)

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

<x-foo bar="[object Object]">

рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдзрд╛рди рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ref рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред

<x-foo ref={el => el.bar = baz}>

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

рдпрд╣ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреБрдЫ рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдХреА рд░реВрдкрд░реЗрдЦрд╛ рддреИрдпрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд┐рдПрдХреНрдЯ рдХреЛ рдХреИрд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ

рд╡рд┐рдХрд▓реНрдк 1: рдХреЗрд╡рд▓ рдЧреБрдг рд╕реЗрдЯ рдХрд░реЗрдВ

рдпрд╣ рддрдп рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдХрд┐ рдХреЛрдИ рд╕рдВрдкрддреНрддрд┐ рдпрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реЗрдЯ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╣рдореЗрд╢рд╛ рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдкрд░ рдЧреБрдг рд╕реЗрдЯ рдХрд░ рд╕рдХрддреА рд╣реИред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪ рдирд╣реАрдВ рдХрд░реЗрдЧреА рдХрд┐ рд╕рдВрдкрддреНрддрд┐ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИ рдпрд╛ рдирд╣реАрдВред

рдЙрджрд╛рд╣рд░рдг:

<x-foo bar={baz}>

рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рд╣реЛрдЧрд╛ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ .bar рдХреА рд╕рдВрдкрддреНрддрд┐ x-foo рддрддреНрд╡ рдХреЗ рдореВрд▓реНрдп рдХреЗ рдмрд░рд╛рдмрд░ baz ред

CamelCased рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдирд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП, React рдЙрд╕реА рд╢реИрд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд╣ рдЖрдЬ tabIndex рдЬреИрд╕реА рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реИред

<x-foo squidInk={pasta}> // sets .squidInk = pasta

рдкреЗрд╢реЗрд╡рд░реЛрдВ

рд╕рдордЭрдиреЗ рдореЗрдВ рдЖрд╕рд╛рди/рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди

рдпрд╣ рдореЙрдбрд▓ рд╕рд░рд▓, рд╕реНрдкрд╖реНрдЯ рдФрд░ рд░рд┐рдПрдХреНрдЯ рдХреЗ "рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ-рдХреЗрдВрджреНрд░рд┐рдд рдПрдкреАрдЖрдИ рдЯреВ рдбреЛрдо" рдХреЗ рд╕рд╛рде рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред

рдкреЙрд▓рд┐рдорд░ рдпрд╛ рд╕реНрдХреЗрдЯ рдЬреИрд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдХреЛрдИ рднреА рддрддреНрд╡ рдЕрдкрдиреА рдЙрдЬрд╛рдЧрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЧреБрдг рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛ред рдЗрди рддрддреНрд╡реЛрдВ рдХреЛ рдЙрдкрд░реЛрдХреНрдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде "рдмрд╕ рдХрд╛рдо" рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╣рд╛рде рд╕реЗ рд▓рд┐рдЦрдиреЗ рд╡рд╛рд▓реЗ рд╡реЗрдирд┐рд▓рд╛ рдШрдЯрдХреЛрдВ рдХреЛ рдЧреБрдгреЛрдВ рдХреЗ рд╕рд╛рде рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ <input> рдЬреИрд╕реЗ рдСрдбрдмреЙрд▓ рдирд╣реАрдВ) HTML5 рддрддреНрд╡ ( <video> , <audio> , рдЖрджрд┐) рдХреНрд░рд┐рдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рднрд╡рд┐рд╖реНрдп рдХреА рд╡реИрд╢реНрд╡рд┐рдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рд╕реЗ рдмрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИ

рдЬрдм рд░рд┐рдПрдХреНрдЯ рдПрдХ рдХрд╕реНрдЯрдо рддрддреНрд╡ рдкрд░ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рддреЛ рд╣рдореЗрд╢рд╛ рдЬреЛрдЦрд┐рдо рд╣реЛрддрд╛ рд╣реИ рдХрд┐ HTML рдХрд╛ рднрд╡рд┐рд╖реНрдп рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рд╕рдорд╛рди рдирд╛рдорд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рд╢рд┐рдк рдХрд░реЗрдЧрд╛ рдФрд░ рдЪреАрдЬреЛрдВ рдХреЛ рддреЛрдбрд╝ рджреЗрдЧрд╛ред рдЗрд╕ рдЪрд┐рдВрддрд╛ рдкрд░ рд╡рд┐рд╢реЗрд╖ рд▓реЗрдЦрдХреЛрдВ рдХреЗ рд╕рд╛рде рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд▓реЗрдХрд┐рди рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдХреЛрдИ рд╕реНрдкрд╖реНрдЯ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИред рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рд╕реЗ рдмрдЪрдирд╛ (рд╕рд┐рд╡рд╛рдп рдЬрдм рдХреЛрдИ рдбреЗрд╡рд▓рдкрд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ ref рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ) рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рддрдм рддрдХ рджреВрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдмреЗрд╣рддрд░ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдЖрддреЗред

рдХрд╕реНрдЯрдо рддрддреНрд╡ "рдЕрдкрдЧреНрд░реЗрдб" рдХрд╛ рд▓рд╛рдн рдЙрдард╛рддрд╛ рд╣реИ

рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреЛ рдкреГрд╖реНрда рдкрд░ рдЖрд▓рд╕реА рд░реВрдк рд╕реЗ рдЕрдкрдЧреНрд░реЗрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХреБрдЫ рдкреАрдЖрд░рдкреАрдПрд▓ рдкреИрдЯрд░реНрди рдЗрд╕ рддрдХрдиреАрдХ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВред рдЕрдкрдЧреНрд░реЗрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди, рдПрдХ рдХрд╕реНрдЯрдо рддрддреНрд╡ рд░рд┐рдПрдХреНрдЯ рджреНрд╡рд╛рд░рд╛ рдкрд╛рд░рд┐рдд рдЧреБрдгреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛ рд╣реИ-рднрд▓реЗ рд╣реА рд╡реЗ рдЧреБрдг рд▓реЛрдб рдХреА рдЧрдИ рдкрд░рд┐рднрд╛рд╖рд╛ рд╕реЗ рдкрд╣рд▓реЗ рд╕реЗрдЯ рдХрд┐рдП рдЧрдП рд╣реЛрдВ- рдФрд░ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдШрдЯрдХ рдХреА рддрд░рд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ

рдЬрдм рд░рд┐рдПрдХреНрдЯ рдШрдЯрдХ рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рдбреЗрдЯрд╛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╡реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЧреБрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рд╕рд┐рд░реНрдл рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреЛ рдЙрд╕реА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░реЗрдЧрд╛ред

рджреЛрд╖

рд╢рд╛рдпрдж рдПрдХ рддреЛрдбрд╝рдиреЗ рд╡рд╛рд▓рд╛ рдмрджрд▓рд╛рд╡

рдпрджрд┐ рдХреЛрдИ рдбреЗрд╡рд▓рдкрд░ рд╡реИрдирд┐рд▓рд╛ рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреЛ рд╣рд╛рде рд╕реЗ рд▓рд┐рдЦрддрд╛ рд░рд╣рд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ API рд╣реИ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдЕрдкрдирд╛ рдХреЛрдб рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдпрд╛ рдЙрдирдХрд╛ рдРрдк рдЯреВрдЯ рдЬрд╛рдПрдЧрд╛ред рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ref рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдареАрдХ рд╣реЛрдЧрд╛ (рдиреАрдЪреЗ рд╕рдордЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред

рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░реЗрдлрд░реА рдЪрд╛рд╣рд┐рдП

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

<custom-element ref={el => el.setAttribute('my-attr', val)} />

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

рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛

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

рд╡рд┐рдХрд▓реНрдк 2: рдЧреБрдг-рдЕрдЧрд░-рдЙрдкрд▓рдмреНрдз

рд░рдирдЯрд╛рдЗрдо рдкрд░ рд░рд┐рдПрдХреНрдЯ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХрд╕реНрдЯрдо рддрддреНрд╡ рдкрд░ рдХреЛрдИ рд╕рдВрдкрддреНрддрд┐ рдореМрдЬреВрдж рд╣реИ рдпрд╛ рдирд╣реАрдВред рдпрджрд┐ рд╕рдВрдкрддреНрддрд┐ рдореМрдЬреВрдж рд╣реИ, рддреЛ рд░рд┐рдПрдХреНрдЯ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛, рдЕрдиреНрдпрдерд╛ рдпрд╣ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП Preact рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рд╕реНрдпреВрдбреЛрдХреЛрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:

if (propName in element) {
  element[propName] = value;
} else {
  element.setAttribute(propName.toLowerCase(), value);
}

рд╕рдВрднрд╛рд╡рд┐рдд рдХрджрдо:

  • рдпрджрд┐ рдХрд┐рд╕реА рддрддреНрд╡ рдореЗрдВ рдПрдХ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕рдВрдкрддреНрддрд┐ рд╣реИ, рддреЛ рд░рд┐рдПрдХреНрдЯ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред

  • рдпрджрд┐ рдХрд┐рд╕реА рддрддреНрд╡ рдореЗрдВ рдПрдХ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕рдВрдкрддреНрддрд┐ рд╣реИ, рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЗрд╕реЗ рдЖрджрд┐рдо рдбреЗрдЯрд╛ (рд╕реНрдЯреНрд░рд┐рдВрдЧ/рд╕рдВрдЦреНрдпрд╛/рдмреВрд▓рд┐рдпрди) рдкрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реА рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧреАред

    • рд╡реИрдХрд▓реНрдкрд┐рдХ: рдЪреЗрддрд╛рд╡рдиреА рджреЗрдВ рдФрд░ рд╕реЗрдЯ рди рдХрд░реЗрдВред
  • рдпрджрд┐ рдХрд┐рд╕реА рддрддреНрд╡ рдореЗрдВ рдПрдХ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕рдВрдкрддреНрддрд┐ рд╣реИ, рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЗрд╕реЗ рдПрдХ рд╡рд╕реНрддреБ/рд╕рд░рдгреА рдкрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реА рд╣реИ, рддреЛ рдпрд╣ рдЗрд╕реЗ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд░ рджреЗрдЧреАред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ some-attr="[рдСрдмреНрдЬреЗрдХреНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ]" рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИред

    • рд╡реИрдХрд▓реНрдкрд┐рдХ: рдЪреЗрддрд╛рд╡рдиреА рджреЗрдВ рдФрд░ рд╕реЗрдЯ рди рдХрд░реЗрдВред
  • рдпрджрд┐ рд╕рд░реНрд╡рд░ рдкрд░ рддрддреНрд╡ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЗрд╕реЗ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ/рд╕рдВрдЦреНрдпрд╛/рдмреВрд▓рд┐рдпрди рдкрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реА рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧреАред

  • рдпрджрд┐ рд╕рд░реНрд╡рд░ рдкрд░ рддрддреНрд╡ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЗрд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ/рд╕рд░рдгреА рдкрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реА рд╣реИ, рддреЛ рдпрд╣ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

рдкреЗрд╢реЗрд╡рд░реЛрдВ

рдЧреИрд░-рддреЛрдбрд╝рдиреЗ рд╡рд╛рд▓рд╛ рдкрд░рд┐рд╡рд░реНрддрди

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

рджреЛрд╖

рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЕрдиреБрдорд╛рдиреА рдХреЛ рд╕рдордЭрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ

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

рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдкрд░ рд╡рд╛рдкрд╕ рдЖрдирд╛ рднрд╡рд┐рд╖реНрдп рдХреЗ рдЧреНрд▓реЛрдмрд▓реНрд╕ рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рдХрд░ рд╕рдХрддрд╛ рд╣реИ

рд╕реЗрдмрд╕реНрдЯрд┐рдпрди рдиреЗ рдЪрд┐рдВрддрд╛ рд╡реНрдпрдХреНрдд рдХреА рдХрд┐ рдХрд╕реНрдЯрдо рддрддреНрд╡ рдкрд░ рдХрд┐рд╕реА рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП in рдХрд░рдиреЗ рд╕реЗ рдЧрд▓рддреА рд╕реЗ рд╕реБрдкрд░рдХреНрд▓рд╛рд╕ (HTMLElement) рдкрд░ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдкрддрд╛ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдкрд╣рд▓реЗ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╡реИрд╢реНрд╡рд┐рдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЕрдиреНрдп рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рд░реЛрдз рднреА рд╣реИрдВред

рд╡рд┐рдХрд▓реНрдк 3: рдПрдХ рд╕рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдЧреБрдгреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░реЗрдВ

рд░рд┐рдПрдХреНрдЯ рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдкрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рд╕реЗрдЯ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╕рддрд░реНрдХ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЧреБрдгреЛрдВ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ Glimmer.js рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ

рдЪрдордХрджрд╛рд░ рдЙрджрд╛рд╣рд░рдг:

<custom-img @src="corgi.jpg" @hiResSrc="[email protected]" width="100%">

рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, @ рд╕рд┐рдЧрд┐рд▓ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ src рдФрд░ hiResSrc рдХреЛ рдЧреБрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╕реНрдЯрдо рддрддреНрд╡ рдХреЛ рдбреЗрдЯрд╛ рдкрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ width рдХреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдХреНрд░рдордмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

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

рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реАрдПрдХреНрдЯ рдХреЗ рдПрдЪ/рдЯреА рд╕реЗ

рдкреЗрд╢реЗрд╡рд░реЛрдВ

рдиреЙрди-рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдЬрд┐рд╕реЗ рдбреЗрд╡рд▓рдкрд░ рдСрдкреНрдЯ-рдЗрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╕рднреА рд░рд┐рдПрдХреНрдЯ + рдХрд╕реНрдЯрдо рдПрд▓рд┐рдореЗрдВрдЯ рдРрдк рдареАрдХ рдЙрд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░рддреЗ рд░рд╣реЗрдВрдЧреЗ рдЬреИрд╕реЗ рдЙрдирдХреЗ рдкрд╛рд╕ рд╣реИред рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╡реЗ рдирдИ рд╕рддрд░реНрдХ рд╢реИрд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдЗрд╕реА рддрд░рд╣ рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ/рдЧреБрдгреЛрдВ рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рддреЗ рд╣реИрдВ

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

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

<!-- Vue will serialize `foo` to an attribute string, and set `squid` using a JavaScript property -->
<custom-element :foo="barтАЭ :squid.prop=тАЭinkтАЭ>

рдХреЛрдгреАрдп рдЙрджрд╛рд╣рд░рдг:

<!-- Angular will serialize `foo` to an attribute string, and set `squid` using a JavaScript property -->
<custom-element [attr.foo]="barтАЭ [squid]=тАЭinkтАЭ>

рдкреНрд░рдгрд╛рд▓реА рд╕реНрдкрд╖реНрдЯ рд╣реИ

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

рджреЛрд╖

рдпрд╣ рдирдпрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣реИ

рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдпрд╣ рд╕рд┐рдЦрд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдП рдФрд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рдкреАрдЫреЗ рдХреА рдУрд░ рд╕рдВрдЧрдд рд╣реИ, рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛

рдХреНрдпрд╛ рд╕рд┐рдЧрд┐рд▓ рдХреЛ рд╕рдорд╛рди рдирд╛рдорд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?

рд╡рд┐рдХрд▓реНрдк 4: рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд╕реНрддреБ рдЬреЛрдбрд╝реЗрдВ

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

рдЙрджрд╛рд╣рд░рдг:

const bar = 'baz';
const hello = 'World';
const width = '100%';
const ReactElement = <Test
  foo={bar} // uses JavaScript property
  attrs={{ hello, width }} // serialized to attributes
/>;

рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдореВрд▓ рд░реВрдк рд╕реЗ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд @treshugart, Skate.js рдХреЗ рд▓реЗрдЦрдХ рджреНрд╡рд╛рд░рд╛, рдФрд░ рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╡реИрд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдпред

рдкреЗрд╢реЗрд╡рд░реЛрдВ

рдкреНрд░рдгрд╛рд▓реА рд╕реНрдкрд╖реНрдЯ рд╣реИ

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

рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рднреА рд╣рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИ

рдиреЛрдЯ: рдпрд╣ рдЗрд╕ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИ рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ :)

рд╕рдорд╕реНрдпрд╛ # 7901 рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЬрдм рдШреЛрд╖рдгрд╛рддреНрдордХ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВ рддреЛ рд░рд┐рдПрдХреНрдЯ рдЕрдкрдиреЗ рд╕рд┐рдВрдереЗрдЯрд┐рдХ рдЗрд╡реЗрдВрдЯ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдХрд╕реНрдЯрдо рддрддреНрд╡ рдИрд╡реЗрдВрдЯ рдирд╛рдо рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИрдВ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдХрд┐рд╕реА рднреА рдлреИрд╢рди рдореЗрдВ рдХреИрдкрд┐рдЯрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЖрдЬ рд╕рд┐рдВрдереЗрдЯрд┐рдХ рдЗрд╡реЗрдВрдЯ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рдорддрд▓рдм рдпрд╣ рднреА рд╣реЛрдЧрд╛ рдХрд┐ JSX рд╕реЗ addEventListener рддрдХ рдЗрд╡реЗрдВрдЯ рдХреЗ рдирд╛рдореЛрдВ рдХреЛ рдореИрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрдорд╛рди рдХреЗ рд╕рд╛рде рдЖрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

// should this listen for: 'foobar', 'FooBar', or 'fooBar'?
onFooBar={handleFooBar}

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдЧрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рдмрдврд╝рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рддреЛ рдЗрд╕реЗ рдШрдЯрдирд╛рдУрдВ рдХреЛ рднреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдмрдврд╝рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

const bar = 'baz';
const hello = 'World';
const SquidChanged = e => console.log('yo');
const ReactElement = <Test
  foo={bar}
  attrs={{ hello }}
  events={{ SquidChanged}} // addEventListener('SquidChanged', тАж)
/>;

рдЗрд╕ рдореЙрдбрд▓ рдореЗрдВ рд╡реЗрд░рд┐рдПрдмрд▓ рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдИрд╡реЗрдВрдЯ рдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреЛрдИ рдЕрдиреБрдорд╛рдиреА рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИред

рджреЛрд╖

рдпрд╣ рдирдпрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣реИ

рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдпрд╣ рд╕рд┐рдЦрд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдП рдФрд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рдкреАрдЫреЗ рдХреА рдУрд░ рд╕рдВрдЧрдд рд╣реИ, рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдпрд╣ рдПрдХ рддреЛрдбрд╝рдиреЗ рд╡рд╛рд▓рд╛ рдмрджрд▓рд╛рд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ

рдпрджрд┐ рдХреЛрдИ рдШрдЯрдХ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА attrs рдпрд╛ events рдирд╛рдо рдХреА рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИ, рддреЛ рдпрд╣ рдЙрдиреНрд╣реЗрдВ рддреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИред

рдпрд╣ рдкрд┐рдЫрд▓реЗ рдХрд┐рд╕реА рднреА рдкреНрд░рд╕реНрддрд╛рд╡ рд╕реЗ рдмрдбрд╝рд╛ рдмрджрд▓рд╛рд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ

рд░рд┐рдПрдХреНрдЯ 17 рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реГрджреНрдзрд┐рд╢реАрд▓ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдЬреИрд╕реЗ рдкрд┐рдЫрд▓реЗ рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ) рдФрд░ рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ рдмрд╛рдж рдореЗрдВ, рдмрдбрд╝реЗ рд░рд┐рдлреНрд▓реЗрдХреНрдЯрд░ рдХреЗ рд▓рд┐рдП рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХреЗ рд░реВрдк рдореЗрдВ рд░рдЦреЗрдВред

рд╡рд┐рдХрд▓реНрдк 5: рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдкреАрдЖрдИ

рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ @sophiebits рдФрд░ @gaearon рджреНрд╡рд╛рд░рд╛ рд░рд┐рдПрдХреНрдЯ рдЯреАрдо рдХреА

рд░рд┐рдПрдХреНрдЯ рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдПрдкреАрдЖрдИ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рддрддреНрд╡ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдореИрдк рдХрд░рддрд╛ рд╣реИред

рд╕реНрдпреВрдбреЛрдХреЛрдб рдЙрджрд╛рд╣рд░рдг:

const XFoo = ReactDOM.createCustomElementType({
  element: тАШx-fooтАЩ,
  тАШmy-attrтАЩ: // something that tells React what to do with it
  someRichDataProp: // something that tells React what to do with it
});

рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдПрдХ рдкреНрд░реЙрдХреНрд╕реА рдШрдЯрдХ рджреЗрддрд╛ рд╣реИ, XFoo рдЬреЛ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд╕реНрдЯрдо рддрддреНрд╡ рдХреЛ рдбреЗрдЯрд╛ рдкрд╛рд╕ рдХрд░рдирд╛ рдЬрд╛рдирддрд╛ рд╣реИред рдЖрдк рд╕реАрдзреЗ рдХрд╕реНрдЯрдо рддрддреНрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЕрдкрдиреЗ рдРрдк рдореЗрдВ рдЗрд╕ рдкреНрд░реЙрдХреНрд╕реА рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред

рдЙрджрд╛рд╣рд░рдг рдЙрдкрдпреЛрдЧ:

<XFoo someRichDataProp={...} />

рдкреЗрд╢реЗрд╡рд░реЛрдВ

рдкреНрд░рдгрд╛рд▓реА рд╕реНрдкрд╖реНрдЯ рд╣реИ

рдбреЗрд╡рд▓рдкрд░реНрд╕ рд░рд┐рдПрдХреНрдЯ рдХреЛ рд╡рд╣реА рд╕рдЯреАрдХ рд╡реНрдпрд╡рд╣рд╛рд░ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╡реЗ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдЧреИрд░-рддреЛрдбрд╝рдиреЗ рд╡рд╛рд▓рд╛ рдкрд░рд┐рд╡рд░реНрддрди

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

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрд╣рд╛рд╡рд░реЗрджрд╛рд░

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

рджреЛрд╖

рдПрдХ рдЬрдЯрд┐рд▓ рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХрд╛рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИ

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

рдмрдВрдбрд▓ рдХрд╛ рдЖрдХрд╛рд░ рдлреВрд▓ рд╕рдХрддрд╛ рд╣реИ

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

рдиреЛрдЯ: рдореБрдЭреЗ 100% рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдЪ рд╣реИред

рдХреЙрдиреНрдлрд┐рдЧ рдХреЛ рдШрдЯрдХ рдХреЗ рд╕рд╛рде рддрд╛рд▓рдореЗрд▓ рд░рдЦрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ

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

рд╕реАрд╕реА @sebmarkbage @gaearon @developit @treshugart @justinfagnani

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рд╣реЗ рджреЛрд╕реНрддреЛрдВ, рдЗрд╕ рдмреАрдЪ рдЬрдм рд╣рдо рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ, рдореИрдВрдиреЗ рд░рд┐рдПрдХреНрдЯ рдореЗрдВ рдЖрдкрдХреЗ рд╡реЗрдм рдШрдЯрдХ рдХреЛ рд▓рдкреЗрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢рд┐рдо рдмрдирд╛рдпрд╛ рд╣реИ https://www.npmjs.com/package/reactify-wc

import React from "react";
import reactifyWc from "reactify-wc";

// Import your web component. This one defines a tag called 'vaadin-button'
import "@vaadin/vaadin-button";

const onClick = () => console.log('hello world');

const VaadinButton = reactifyWc("vaadin-button");

export const MyReactComponent = () => (
  <>
    <h1>Hello world</h1>
    <VaadinButton onClick={onClick}>
      Click me!
    </VaadinButton>
  </>
)

рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдорджрджрдЧрд╛рд░ рд╕рд╛рдмрд┐рдд рд╣реЛрдЧрд╛

(рдпрд╣ рдУрдПрд╕рдПрд╕ рдореЗрдВ рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рдкреНрд░рд╡реЗрд╢ рд╣реИ, рдФрд░ рдореЗрд░реЗ рдХрд╛рд░реНрдпрд╛рд▓рдп рд╕реЗ рдмрд╛рд╣рд░ рдХрд┐рд╕реА рдЪреАрдЬ рдХреА рдкрд╣рд▓реА рдУрдкрди рд╕реЛрд░реНрд╕рд┐рдВрдЧ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рд░рдЪрдирд╛рддреНрдордХ рдЖрд▓реЛрдЪрдирд╛ рд╕реНрд╡рд╛рдЧрдд рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ ЁЯШД)

рд╕рднреА 129 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдлрд╝реА, рд▓реЗрдХрд┐рди рдореИрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдореИрдВ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдХрд▓реНрдк рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рддрд▓рд╛рд╢ рд░рд╣рд╛ рдерд╛ред рдореИрдВ рдЕрдкрдиреА рд░рд╛рдп рдХреЗ рд╕рд╛рде рдЪреАрдЬреЛрдВ рдХреЛ рдмрд╣реБрдд рдЬреНрдпрд╛рджрд╛ рдкреВрд░реНрд╡рд╛рдЧреНрд░рд╣ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореИрдВ рдЪреБрдирдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдерд╛, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рд╡рд┐рдХрд▓реНрдк 3 рдХреЗ рд╕рд╛рде рдЬрд╛рдКрдВрдЧрд╛ред

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

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

рдореИрдВ рд╡рд┐рдХрд▓реНрдк 2 рдФрд░ рд╡рд┐рдХрд▓реНрдк 3 рдХреЗ рдмреАрдЪ рд╣реВрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдиреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╕рдВрднрд╛рд▓рд╛ рд╣реИ рдФрд░ рдПрдкреАрдЖрдИ рдЕрддреАрдд рдореЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдмрджрд▓рддрд╛ рд╣реИред рдбреЙрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдВ рдФрд░ рд▓рд┐рдВрдХ рдкреЗрд╢ рдХрд░рдиреЗ рд╕реЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓ рд╕рдХрддреА рд╣реИ рдХрд┐ рд╣реБрдб рдХреЗ рддрд╣рдд рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред

рд╡рд┐рдХрд▓реНрдк 3 рдЗрд╕рдХреА рдШреЛрд╖рдгрд╛рддреНрдордХ рдкреНрд░рдХреГрддрд┐ рдХреЗ рдХрд╛рд░рдг рдЖрдХрд░реНрд╖рдХ рджрд┐рдЦрддрд╛ рд╣реИ, JSX рдХреЛрдб рдХреЛ рдкрдврд╝рддреЗ рд╕рдордп рдирдП рдЖрдиреЗ рд╡рд╛рд▓реЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рддреБрд░рдВрдд рдкрддрд╛ рдЪрд▓ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рддрддреНрд╡ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╕рдордп рд░рд┐рдПрдХреНрдЯ рдХреНрдпрд╛ рдХрд░реЗрдЧрд╛ред

рд╡рд┐рдХрд▓реНрдк 2 рдкрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

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

рдХреНрдпрд╛ рдХрд╕реНрдЯрдо рддрддреНрд╡ рдХреЗ рдЙрдкрднреЛрдХреНрддрд╛рдУрдВ рдХреЛ рдЗрд╕ рдЕрдВрддрд░ рдХреЛ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдпрд╛ рдпрд╣ рдХреЗрд╡рд▓ рдХрд╕реНрдЯрдо рддрддреНрд╡ рдХреЗ рд▓реЗрдЦрдХ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ? рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рддрддреНрд╡ рдХреЗ рд▓реЗрдЦрдХ рдХреЛ HTML рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА (рдЪреВрдВрдХрд┐ HTML рдЙрдкрдпреЛрдЧ рд╕реЗ рдбреЗрдЯрд╛ рдкрд╛рд╕ рд╣реЛрдиреЗ рдХрд╛ рдпрд╣реА рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рд╣реИ) рдФрд░ рдЧреБрдг рдпрджрд┐ рд╡реЗ рдЬрдЯрд┐рд▓ рдореВрд▓реНрдпреЛрдВ рдпрд╛ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ DOM рд╕реЗ рдкреНрд░рд╛рдкреНрдд/рд╕реЗрдЯ рдХрд░реЗрдВред рдпрд╣ рднреА рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдПрдХ рд▓реЗрдЦрдХ рдиреЗ рд╢реБрд░реВ рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХреБрдЫ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реЛ рдФрд░ рдлрд┐рд░ рдмрд╛рдж рдореЗрдВ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓реЗ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрд╕реА рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдЬреЛрдбрд╝ рд╕рдХреЗ рдФрд░ рдлрд┐рд░ рднреА рдЧреБрдгреЛрдВ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рд╕рдВрдкрддреНрддрд┐ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХреЗред

рднрд╡рд┐рд╖реНрдп рдХреЗ HTMLElement рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдФрд░ рдЧреБрдгреЛрдВ рдХреЗ рд╕рд╛рде рдирд╛рдордХрд░рдг рдЯрдХрд░рд╛рд╡ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╡реЗрдм рдШрдЯрдХ рдорд╛рдирдХреЛрдВ рдореЗрдВ рдПрдХ рдХрдордЬреЛрд░реА рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рд╕реЗ рдмрд╛рдзреНрдпрдХрд╛рд░реА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред

рдпрджрд┐ рдХрд┐рд╕реА рддрддреНрд╡ рдореЗрдВ рдПрдХ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕рдВрдкрддреНрддрд┐ рд╣реИ, рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЗрд╕реЗ рдПрдХ рд╡рд╕реНрддреБ/рд╕рд░рдгреА рдкрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реА рд╣реИ, рддреЛ рдпрд╣ рдЗрд╕реЗ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд░ рджреЗрдЧреАред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ some-attr="[рдСрдмреНрдЬреЗрдХреНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ]" рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореВрд▓реНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдмрд╛рдВрдзрдирд╛ рднреНрд░рдорд┐рдд рд╣реИред рдпрджрд┐ рддрддреНрд╡ рдХреЗ рд▓реЗрдЦрдХ рдиреЗ рдореВрд▓реНрдп рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдЧреЗрдЯрд░/рд╕реЗрдЯрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ рддреЛ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рд╕реЗ рддрддреНрд╡ рдРрд╕рд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░реЗрдЧрд╛ рдЬреИрд╕реЗ рдорд╛рди рдХрднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬреЛ рдбреАрдмрдЧ рдХрд░рдирд╛ рдХрдард┐рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рд╡рд┐рдХрд▓реНрдк 3 рдкрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рд╡рд┐рдХрд▓реНрдк 3 рдХреЗ рд╕рд╛рде рдПрдХ рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рдиреБрдХрд╕рд╛рди рдпрд╣ рд╣реИ рдХрд┐ рдХрд╕реНрдЯрдо рддрддреНрд╡ рдХреЗ рдЙрдкрднреЛрдХреНрддрд╛ рдХреЛ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рддрддреНрд╡ рдиреЗ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХреБрдЫ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдпрджрд┐ рдЖрдк рд░рд┐рдПрдХреНрдЯ рдШрдЯрдХреЛрдВ рдФрд░ рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреЗ рдорд┐рд╢реНрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдПрдХ рдЕрд▓рдЧ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдФрд░ рдХрд╕реНрдЯрдо рддрддреНрд╡ рдЧреБрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░рд┐рдПрдХреНрдЯ рдкреНрд░реЙрдкреНрд╕ рдХреЛ рд╕реЗрдЯ рдХрд░рдирд╛ рднреНрд░рд╛рдордХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдХреНрдпрд╛ рдХрд╕реНрдЯрдо рддрддреНрд╡ рдХреЗ рдЙрдкрднреЛрдХреНрддрд╛рдУрдВ рдХреЛ рдЗрд╕ рдЕрдВрддрд░ рдХреЛ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдпрд╛ рдпрд╣ рдХреЗрд╡рд▓ рдХрд╕реНрдЯрдо рддрддреНрд╡ рдХреЗ рд▓реЗрдЦрдХ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ?

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

рднрд╡рд┐рд╖реНрдп рдХреЗ HTMLElement рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдФрд░ рдЧреБрдгреЛрдВ рдХреЗ рд╕рд╛рде рдирд╛рдордХрд░рдг рдЯрдХрд░рд╛рд╡ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╡реЗрдм рдШрдЯрдХ рдорд╛рдирдХреЛрдВ рдореЗрдВ рдПрдХ рдХрдордЬреЛрд░реА рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рд╕реЗ рдмрд╛рдзреНрдпрдХрд╛рд░реА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред

рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕реЗ рд░рд┐рдПрдХреНрдЯ рдХреЛ рдЕрдкрдиреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдРрд╕реА рд╕рдорд╕реНрдпрд╛ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдХрд╕реНрдЯрдо рдПрд▓рд┐рдореЗрдВрдЯ рд╕реНрдкреЗрдХ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдЖрдЧрд╛рдореА рдЯреАрдкреАрдПрд╕реА рдорд╛рдирдХреЛрдВ рдХреА рдмреИрдардХ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

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

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореВрд▓реНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдмрд╛рдВрдзрдирд╛ рднреНрд░рдорд┐рдд рд╣реИред рдпрджрд┐ рддрддреНрд╡ рдХреЗ рд▓реЗрдЦрдХ рдиреЗ рдореВрд▓реНрдп рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдЧреЗрдЯрд░/рд╕реЗрдЯрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ рддреЛ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рд╕реЗ рддрддреНрд╡ рдРрд╕рд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░реЗрдЧрд╛ рдЬреИрд╕реЗ рдорд╛рди рдХрднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬреЛ рдбреАрдмрдЧ рдХрд░рдирд╛ рдХрдард┐рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

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

рдпрд╣ рд╕рдЪ рд╣реИ рдХрд┐ рдпрджрд┐ рд▓реЗрдЦрдХ рдореВрд▓реНрдп рдХреЗ рд▓рд┐рдП рдЧреЗрдЯрдЯрд░/рд╕реЗрдЯрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рддреЛ рдпрд╣ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди my-attr=[object Object] рднреА рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИред рдФрд░ рдЪреВрдВрдХрд┐ рдЖрдк рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рд╕рдВрдкрддреНрддрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИ рдпрд╛ рдпрджрд┐ рд╡реЗ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗрд╡рд▓ рдЖрд▓рд╕реА рд▓реЛрдб рд╣реЛ рд░рд╣реА рд╣реИ, рддреЛ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рд╕реЗрдЯ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд▓рдЧрддрд╛ рд╣реИред

рд╡рд┐рдХрд▓реНрдк 3 рдХреЗ рд╕рд╛рде рдПрдХ рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рдиреБрдХрд╕рд╛рди рдпрд╣ рд╣реИ рдХрд┐ рдХрд╕реНрдЯрдо рддрддреНрд╡ рдХреЗ рдЙрдкрднреЛрдХреНрддрд╛ рдХреЛ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рддрддреНрд╡ рдиреЗ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХреБрдЫ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред

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

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

[рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ]

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рдЕрдкрдиреЗ рдкрд╣рд▓реЗ рдмрд┐рдВрджреБ рдореЗрдВ рдХрд╣рд╛ рдерд╛:

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рддрддреНрд╡ рдХреЗ рд▓реЗрдЦрдХ рдХреЛ HTML рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА (рдЪреВрдВрдХрд┐ HTML рдЙрдкрдпреЛрдЧ рд╕реЗ рдбреЗрдЯрд╛ рдкрд╛рд╕ рд╣реЛрдиреЗ рдХрд╛ рдпрд╣реА рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рд╣реИ) рдФрд░ рдЧреБрдг рдпрджрд┐ рд╡реЗ рдЬрдЯрд┐рд▓ рдореВрд▓реНрдпреЛрдВ рдпрд╛ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ DOM рд╕реЗ рдкреНрд░рд╛рдкреНрдд/рд╕реЗрдЯ рдХрд░реЗрдВред

рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдХрднреА рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдкрдХреЗ рддрддреНрд╡ рдХреЛ рдбреЗрдЯрд╛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХреИрд╕реЗ рдХрд░реЗрдЧрд╛, рдлрд┐рд░ рднреА рдЖрдкрдХреЛ рд╡рд┐рд╢реЗрд╖рддрд╛-рд╕рдВрдкрддреНрддрд┐ рдкрддреНрд░рд╛рдЪрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рд╡рд┐рдХрд▓реНрдк 3 рднреЗрдЬ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЬреНрдпрд╛рджрд╛рддрд░ рд▓реЛрдЧ @ рд╕рд┐рдЧрд┐рд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдм рдХреБрдЫ рдмрд╛рдВрдз рджреЗрдВрдЧреЗ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред рдЗрд╕ рддрд░рд╣ рдореИрдВ рдЖрдЬ Vue рдореЗрдВ рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ .prop рд╕рдВрд╢реЛрдзрдХ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддреЗ рд╣реИрдВред

рдХрд╕реНрдЯрдо рддрддреНрд╡ рдХреЗ рдЙрдкрднреЛрдХреНрддрд╛ рдХреЛ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рддрддреНрд╡ рдиреЗ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХреБрдЫ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИ

рдРрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реИ, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЪрд┐рдВрддрд╛ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рд░реЙрдм рдиреЗ рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдХрд╣рд╛, рдпрд╣ рдХрд╕реНрдЯрдо рддрддреНрд╡ рд▓реЗрдЦрдХ рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд╣реИ рдХрд┐ рд╡рд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдпрд╣ рдмрддрд╛рдП рдХрд┐ рддрддреНрд╡ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдФрд░ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд╣ рддрд░реАрдХрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдореЗрдВ рдЖрдЬ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП <video> рддрддреНрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреЗрдВ, рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдкрдХреЛ рдЗрд╕реЗ рдореНрдпреВрдЯ рдХрд░рдиреЗ рдпрд╛ рдХрд┐рд╕реА рдШрдЯрдХ рдХреЗ рдЕрдВрджрд░ рд╡рд░реНрддрдорд╛рди рд╕рдордп рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

muted рдПрдХ рдмреВрд▓рд┐рдпрди рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

render() {
  return (
    <div className="video--wrapper">
      <video muted={ this.state.muted } />
    </div>
  );
}

рд╡рд░реНрддрдорд╛рди рд╕рдордп рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рд╡реАрдбрд┐рдпреЛ рддрддреНрд╡ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддреЗ рд╣реБрдП ref рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред

render() {
  return (
    <div className="video--wrapper">
      <video ref={ el => this.video = el } muted={ this.state.muted } />
    </div>
  );
}

рдлрд┐рд░ рдПрдХ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░, рдПрдХ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╡рд┐рдзрд┐ рдмрдирд╛рдПрдВ рдФрд░ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ DOM рддрддреНрд╡ рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВред

onCurrenTimeChange(e) {
  this.video.currentTime = e.value;
}

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

render() {
  return (
    <div className="video--wrapper">
      <video muted={ this.state.muted } @currentTime={ this.state.currentTime } />
    </div>
  );
}

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

@cjorasch рдореЗрд░реЗ рджреЛ рд╕реЗрдВрдЯ :)

рдпрджрд┐ рд╣рдо рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдбрд┐рдЬрд╛рдЗрди рдХрд░ рд░рд╣реЗ рдереЗ, рддреЛ рдкреАрдЫреЗ рдХреА рд╕рдВрдЧрддрддрд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдХрд▓реНрдк 1 рдкреНрд░рддрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ "рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ-рдХреЗрдВрджреНрд░рд┐рдд рдПрдкреАрдЖрдИ рдЯреВ рдбреЛрдо" рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдореБрд╣рд╛рд╡рд░реЗрджрд╛рд░ рд╣реЛрдЧрд╛ред

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

рдЕрдЧрд░ рд╣рдо рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд┐рдд рд╣реИрдВ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдмреНрд░реЗрдХрд┐рдВрдЧ рдмрджрд▓рд╛рд╡ рд╣реИ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдХрд▓реНрдк 3 рднреА рдмрд╣реБрдд рдЖрдХрд░реНрд╖рдХ рд╣реИред рдпрджрд┐ рд╕рд┐рдЧрд┐рд▓ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ, рддреЛ рдореИрдВ "ред" рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╡рд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рд╕рдВрдкрддреНрддрд┐ рдПрдХреНрд╕реЗрд╕рд░ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдХрд╕реНрдЯрдо рддрддреНрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╣рд░ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдм рдХрд░рдирд╛ рд╣реИ рдмрдирд╛рдо рдХрд┐рд╕реА рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдм рдХрд░рдирд╛ рд╣реИред рдореИрдВ рд╡рд┐рдХрд▓реНрдк 1 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬреЛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рднрд▓реЗ рд╣реА рдорд╛рдирдЪрд┐рддреНрд░ рдХреЛ рд╡рд┐рд╢реЗрд╖рддрд╛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ, рдЙрд╕ рдореИрдкрд┐рдВрдЧ рдХреЛрдб рдХреЛ рд╕рднреА JSX рдЙрдкрдпреЛрдЧреЛрдВ рд╕реЗ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

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

рд╢рд╛рдпрдж рдореИрдВ рдЕрдкрдЧреНрд░реЗрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдирд╣реАрдВ рд╕рдордЭрддрд╛ред рддрддреНрд╡реЛрдВ рдореЗрдВ рдЖрдорддреМрд░ рдкрд░ рдХреНрд▓рд╛рд╕ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ рдЧреЗрдЯрд░реНрд╕/рд╕реЗрдЯрд░реНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧреБрдг рд╣реЛрддреЗ рд╣реИрдВред propName in element рдЬрд╛рдВрдЪ рдЧреЗрдЯрдЯрд░/рд╕реЗрдЯрд░ рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреЗ рдХрд╛рд░рдг рд╕рддреНрдп рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧреА, рднрд▓реЗ рд╣реА рд╕рдВрдкрддреНрддрд┐ рдореВрд▓реНрдп рдЕрднреА рднреА рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдерд╛ред рдЕрдкрдЧреНрд░реЗрдб рдХреЗ рджреМрд░рд╛рди рдХреНрдпрд╛ рд╕рдВрдкрддреНрддрд┐ рдореВрд▓реНрдп рдХреБрдЫ рдЕрд╕реНрдерд╛рдпреА рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╕реЗрдЯ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдмрд╛рдж рдореЗрдВ рдЖрд▓рд╕реА рд▓реЛрдб рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдХреЙрдкреА рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ?

рдЙрдиреНрдирдпрди рд╡рд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдХрд╕реНрдЯрдо рддрддреНрд╡ рдЕрдкрдиреА рдХрдХреНрд╖рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдЙрд╕ рд╡рд░реНрдЧ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рдВрдкрддреНрддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ/рд╕реЗрдЯрд░ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВред

@jeremenichelli

рдореНрдпреВрдЯ рдПрдХ рдмреВрд▓рд┐рдпрди рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

рдЕрднреА рдЬрд╛рдБрдЪ рдХреА рдЧрдИ рд╣реИ рдФрд░ рдЗрд╕рдХреА рдПрдХ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдВрдкрддреНрддрд┐ рднреА рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ MDN рдкрд░ рдкреНрд░рд▓реЗрдЦрд┐рдд рдирд╣реАрдВ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ: P

рд╡рд░реНрддрдорд╛рди рд╕рдордп рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рд╡реАрдбрд┐рдпреЛ рддрддреНрд╡ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рд░реЗрдлрд░реА рдмрдирд╛рдиреЗ рдФрд░ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред

рд╣рд╛рдБ рдХрднреА-рдХрднреА рдЖрдкрдХреЛ рдЖрдзреБрдирд┐рдХ HTML рддрддреНрд╡реЛрдВ рдкрд░ рдЧреБрдг-рдХреЗрд╡рд▓ API рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝реЗрдЧрд╛ред currentTime рдЙрдЪреНрдЪ рдЖрд╡реГрддреНрддрд┐ рдкрд░ рдЕрдкрдбреЗрдЯ рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ HTML рд╡рд┐рд╢реЗрд╖рддрд╛ рдореЗрдВ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рдореЗрд░рд╛ рдХрд╣рдирд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЬрд┐рд╕ рдореМрд╕рдо рдореЗрдВ рдЖрдк рджреЗрд╢реА рдпрд╛ рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЖрдкрдХреЛ рдЕрднреА рднреА рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЙрдирдХреЗ рдЖрд╕рдкрд╛рд╕ рдЕрдкрдирд╛ рд░рд╛рд╕реНрддрд╛ рдЬрд╛рдирдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ

рд╣рд╛рдВ рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдХреЛрдИ рдПрдХ рдЖрдХрд╛рд░-рдлрд┐рдЯ-рд╕рднреА рдЧреБрдг/рдЧреБрдг рдирд┐рдпрдо рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдо рддреМрд░ рдкрд░ рдмреЛрд▓рддреЗ рд╣реБрдП рдЖрдк рдЧреБрдгреЛрдВ рдкрд░ рднрд╛рд░реА рдкрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреЗрдВред

@robdodson рд╣рд╛рдБ , рдореИрдВ рдореНрдпреВрдЯ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рдЬрд╛рдирддрд╛ рдерд╛ ЁЯШД рдореИрдВрдиреЗ рдЗрди рджреЛрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣ рд╕рд╛рдмрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдерд╛ рдХрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА _in the wild_ рдПрдХ рдЖрдХрд╛рд░-рдлрд┐рдЯ-рд╕рднреА рдирд┐рдпрдо рдирд╣реАрдВ рд╣реИ рдЬреИрд╕рд╛ рдЖрдкрдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИред

рд╣рдореЗрдВ рдореВрд▓ рдФрд░ рдХрд╕реНрдЯрдо рджреЛрдиреЛрдВ рддрддреНрд╡реЛрдВ рдкрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдЗрд╕ рдирд┐рд░реНрдгрдп рдХреЗ рд▓рд┐рдП рдмреБрд░рд╛ рдирд╣реАрдВ рдорд╛рдиреВрдВрдЧрд╛ред

рдЖрдЦрд┐рд░реА рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рд▓рд┐рдЦрддреЗ рд╕рдордп рдореБрдЭреЗ рд╕рдВрдкрддреНрддрд┐ рдмрд╛рдзреНрдпрдХрд╛рд░реА рдкрд╕рдВрдж рдЖрдИ, рд╣рд╛рд▓рд╛рдВрдХрд┐

@effulgentsia

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

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

@cjorasch

рдЖрд░рдИ: рдЕрдкрдЧреНрд░реЗрдбред рдЬреИрд╕рд╛ рдХрд┐ @effulgentsia рдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдкреГрд╖реНрда рдкрд░ рдПрдХ рдХрд╕реНрдЯрдо рддрддреНрд╡ рд╣реЛрдирд╛ рд╕рдВрднрд╡ рд╣реИ рд▓реЗрдХрд┐рди рдмрд╛рдж рдореЗрдВ рдЗрд╕рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рд▓реЛрдб рдХрд░реЗрдВред <x-foo> рд╢реБрд░реВ рдореЗрдВ HTMLElement рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реЛрдЧрд╛ рдФрд░ рдЬрдм рдореИрдВ рдЗрд╕рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рдмрд╛рдж рдореЗрдВ рд▓реЛрдб рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ "рдЕрдкрдЧреНрд░реЗрдб" рд╣реЛрддрд╛ рд╣реИ рдФрд░ XFoo рд╡рд░реНрдЧ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдмрди рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдЗрд╕рдХреЗ рд╕рднреА рдЬреАрд╡рдирдЪрдХреНрд░ рдХреЙрд▓рдмреИрдХ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рд╣рдо рдЗрд╕ рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреЙрд▓рд┐рдорд░ рд╕реНрдЯрд╛рд░реНрдЯрд░ рдХрд┐рдЯ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

<app-router>
  <my-view1></my-view1>
  <my-view2></my-view2>
</app-router>

рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо my-view2 рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рддрдм рддрдХ рд▓реЛрдб рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ рдЬрдм рддрдХ рдХрд┐ рд░рд╛рдЙрдЯрд░ рдЙрд╕рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рди рдХрд░ рджреЗред

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

рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХрд╕реНрдЯрдо рддрддреНрд╡ рдкрд░ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рд╕рддрд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

рдпрджрд┐ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдРрд╕рд╛ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рддреЛ рдпрд╣ рдХрд┐рд╕реА рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдЕрдВрддрд░ рдХреИрд╕реЗ рдХрд░реЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдХрд┐рд╕реА рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ "рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ" рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ "рдЬрд░реВрд░реА" рд╣реИ? рдФрд░ рдХреНрдпрд╛ рдпрд╣ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рднрд┐рдиреНрдирддрд╛ рдирд╣реАрдВ рд╣реИ?

рдпрджрд┐ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдРрд╕рд╛ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рддреЛ рдпрд╣ рдХрд┐рд╕реА рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдЕрдВрддрд░ рдХреИрд╕реЗ рдХрд░реЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдХрд┐рд╕реА рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ "рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ" рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ "рдЬрд░реВрд░реА" рд╣реИ?

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

рдФрд░ рдХреНрдпрд╛ рдпрд╣ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рднрд┐рдиреНрдирддрд╛ рдирд╣реАрдВ рд╣реИ?

рдРрд╕рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╕рд░реНрд╡рд░ рдкрд░ рд╕рд┐рдЧрд┐рд▓ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПред

рдРрд╕рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╕рд░реНрд╡рд░ рдкрд░ рд╕рд┐рдЧрд┐рд▓ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПред

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдпрджрд┐ рд╕рддрд░реНрдХ рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдРрд╕реА рд╕рдВрдкрддреНрддрд┐ рд╣реИ рдЬреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рд╡реАрдбрд┐рдпреЛ рдХрд╛ currentTime ред

рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдВрддрд░ рдХрд░реЗрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ "рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ" рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ "рдЬрд░реВрд░реА"

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

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

рдЕрдзрд┐рдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗ рд░рд╣рд╛ рд╣реВрдВ:

ReactDOM.defineCustomElementProp(elementName, propName, domPropertyName, htmlAttributeName, attributeSerializer)

рдЙрджрд╛рд╣рд░рдг:

// 'muted' can be set as either a property or an attribute.
ReactDOM.defineCustomElementProp('x-foo', 'muted', 'muted', 'muted')

// 'currentTime' can only be set as a property.
ReactDOM.defineCustomElementProp('x-foo', 'currentTime', 'currentTime', null)

// 'my-attribute' can only be set as an attribute.
ReactDOM.defineCustomElementProp('x-foo', 'my-attribute', null, 'my-attribute')

// 'richData' can be set as either a property or an attribute.
// When setting as an attribute, set it as a JSON string rather than "[object Object]".
ReactDOM.defineCustomElementProp('x-foo', 'richData', 'richData', 'richdata', JSON.stringify)

рдХрд┐рд╕реА рдРрд╕реА рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдЬреЛ рдХреЗрд╡рд▓ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ (рдЬрд╣рд╛рдВ htmlAttributeName рд╢реВрдиреНрдп рд╣реИ), SSR рдЗрд╕реЗ рд░реЗрдВрдбрд░ рдХрд░рдирд╛ рдЫреЛрдбрд╝ рджреЗрдЧрд╛ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рд╣рд╛рдЗрдбреНрд░реЗрдЯ рдХрд░реЗрдЧрд╛ред

рдХрд┐рд╕реА рдРрд╕реА рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдЬреЛ рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ (рдЬрд╣рд╛рдВ domPropertyName рд╢реВрдиреНрдп рд╣реИ), рд░рд┐рдПрдХреНрдЯ setAttribute() рдХреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ v16.

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

рдЬрдм рд░рд┐рдПрдХреНрдЯ рдПрдХ рдРрд╕реЗ рдкреНрд░реЛрдк рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП defineCustomElementProp() рдХреЛ рдХреЙрд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЬрд┐рд╕реЗ HTML рд╕реНрдкреЗрдХ рджреНрд╡рд╛рд░рд╛ рд╡реИрд╢реНрд╡рд┐рдХ рд╕рдВрдкрддреНрддрд┐ рдпрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рд░рд┐рдПрдХреНрдЯ рдХреБрдЫ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рддрд░реНрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╢рд╛рдпрдж:

  • рд╕рдВрд╕реНрдХрд░рдг 17 рдореЗрдВ, BC рдХреЛ v16 рдХреЗ рд╕рд╛рде рдмрдирд╛рдП рд░рдЦреЗрдВ рдФрд░ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд░реЗрдВред
  • рд╕рдВрд╕реНрдХрд░рдг 18 рдореЗрдВ, рдорд╛рди рд▓реЗрдВ рдХрд┐ рдпрд╣ рдпрд╛ рддреЛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЙрд╕рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЗрд╖реНрдЯрддрдо рд░рдгрдиреАрддрд┐ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВред

рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рдПрдкреАрдЖрдИ рд░рдЦрдХрд░, JSX рдФрд░ props рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕рд╛рдл рдФрд░ рдПрдХ рд╣реА рдирд╛рдо рд╕реНрдерд╛рди рдХреЗ рднреАрддрд░ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рд╡реЗ рд░рд┐рдПрдХреНрдЯ рдШрдЯрдХреЛрдВ рдФрд░ рдЧреИрд░-рдХрд╕реНрдЯрдо HTML рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИрдВред

рдЕрддреНрдпрдзрд┐рдХ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдКрдкрд░ рдЕрдкрдиреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рд▓рд╛рдн рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛ рдЬрд┐рд╕реЗ рдореИрдВ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ:

рдЙрди ReactDOM.defineCustomElementProp() рдХреЙрд▓ рдХрд╕реНрдЯрдо рддрддреНрд╡ рд▓реЗрдЦрдХ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдЬреЗрдПрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ (рдЙрд╕реА рднрдВрдбрд╛рд░ рдореЗрдВ рдЬрд╣рд╛рдВ рдХрд╕реНрдЯрдо рддрддреНрд╡ рдмрдирд╛рдП рд░рдЦрд╛/рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рд╕рдВрдкрддреНрддрд┐/рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рдЦреНрдд 1:1 рдкрддреНрд░рд╛рдЪрд╛рд░ рд╡рд╛рд▓реЗ рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА, рдЬреЛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдкреГрд╖реНрдарднреВрдорд┐ рд╡рд┐рд╡рд░рдг рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╡реИрд╕реЗ рднреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдФрд░ рдмрд╣реБрдордд рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдХреЗрд╡рд▓ рдХрд╕реНрдЯрдо рддрддреНрд╡ рд▓реЗрдЦрдХреЛрдВ рдХреЛ рдЗрд╕ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд╛ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдПрдХреАрдХрд░рдг рдлрд╝рд╛рдЗрд▓ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдпрджрд┐ рд▓реЗрдЦрдХ рдЗрд╕реЗ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдХрд╕реНрдЯрдо рддрддреНрд╡ рд▓реЗрдЦрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ), рддреЛ рдЙрди рд▓реЛрдЧреЛрдВ рдХрд╛ рд╕рдореБрджрд╛рдп рдЬреЛ рдЙрд╕ рдХрд╕реНрдЯрдо рддрддреНрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рд░рд┐рдПрдХреНрдЯ рдРрдкреНрд╕ рдХреЗ рднреАрддрд░ рдХрд░рддреЗ рд╣реИрдВ, рдЙрд╕ рдПрдХреАрдХрд░рдг рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЖрд╡рд╛рд╕ рдХреЗ рд▓рд┐рдП рдХреЗрдВрджреНрд░реАрдп рднрдВрдбрд╛рд░ рдХреЛ рд╕реНрд╡рдпрдВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

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

рд╡рд┐рдХрд▓реНрдк 3 рдореЗрд░рд╛ рдкрд╕рдВрджреАрджрд╛ рд╣реЛрдЧрд╛ рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдмреНрд░реЗрдХрд┐рдВрдЧ рдмрджрд▓рд╛рд╡ рд╣реИ... рдЙрд▓рдЯрд╛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдПрдХ рдЙрдкрд╕рд░реНрдЧ рд╣реИ рд╕рд╣рд╛рд░рд╛ рдирд╣реАрдВ?

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╕рд┐рдЧрд┐рд▓, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕рд╛ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реВрдВред JSX рдпреБрдХреНрддрд┐ рдХреЛ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдорд╛рдирд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рди рдХрд┐ рдЕрддреНрдпрдзрд┐рдХ рдирд┐рд░реНрднрд░ рдпрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкрд┐рдЫрдбрд╝реЗ рд╕рдВрдЧрддрддрд╛ рдХреЗ рдХрд╛рд░рдг рдЕрдирд┐рдпрдорд┐рддрддрд╛рдУрдВ рдкрд░ рдирд╣реАрдВред obj[prop] = value рдФрд░ obj.setAttributes(props, value) рдЕрд▓рдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдирд╛ рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рд╣реИ рд▓реЗрдХрд┐рди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдПрдкреАрдЖрдИ рдХреЛ рджреЗрдЦрдХрд░ рдЖрд╢реНрдЪрд░реНрдп рдХреА рдмрд╛рдд рдирд╣реАрдВ рд╣реИред @ : [] рд╕рддрд╣ рдкрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рд▓реАрдХ рдХрд░ рджреЗрдЧрд╛ рдФрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗрдВрджреНрд░рд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЦрдВрдбрди рдХрд░реЗрдЧрд╛ред рдЗрд╕рд▓рд┐рдП рдЬрдм рддрдХ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдпреБрдХреНрддрд┐ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдмреБрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ: const data = <strong i="8">@myFunction</strong> // -> "[object Object]"

рдЕрдЧрд░ рдореБрдЭреЗ рдПрдХ рд╡реЗрдм рдШрдЯрдХ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдирд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рдЦреБрд╢реА рд╣реЛрдЧреА рдЕрдЧрд░ рд╢рдмреНрджрд╛рд░реНрде рдХреЛ рд░рд┐рдПрдХреНрдЯ рдФрд░ JSX рд╕реЗ рджреВрд░ рдЫрд┐рдкрд╛рдпрд╛ рдЬрд╛рдП рдФрд░ рд╕рд╛рде рд╣реА рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП рдХрд┐ рд╡реЗ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рдкреЗрд╢ рдХрд░рддреЗ рд╣реИрдВред рд╕рднреА рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ, ref => ... рдХреЛ рдЬрдЧрд╣ рдкрд░ рдЫреЛрдбрд╝рдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред ref рдХреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдФрд░ рдХрдо рд╕реЗ рдХрдо рдбреЗрд╡рд▓рдкрд░ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдХреЛрдИ рд╕рддрд░реНрдХ-рд░рд┐рд╕рд╛рд╡ рдирд╣реАрдВ рд╣реИ, рди рд╣реА рдирдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдЬреЛ рдореМрдЬреВрджрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рддреЛрдбрд╝ рд╕рдХрддреА рд╣реИрдВред

@рд▓реАрдЪреЗрдиреЗрд▓рд░

рд╡рд┐рдХрд▓реНрдк 3 рдореЗрд░рд╛ рдкрд╕рдВрджреАрджрд╛ рд╣реЛрдЧрд╛ рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдмреНрд░реЗрдХрд┐рдВрдЧ рдмрджрд▓рд╛рд╡ рд╣реИ... рдЙрд▓рдЯрд╛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдПрдХ рдЙрдкрд╕рд░реНрдЧ рд╣реИ рд╕рд╣рд╛рд░рд╛ рдирд╣реАрдВ?

рдпрд╣ рдПрдХ рддреЛрдбрд╝рдиреЗ рд╡рд╛рд▓рд╛ рдмрджрд▓рд╛рд╡ рдХреНрдпреЛрдВ рд╣реЛрдЧрд╛? рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдмрдирд╛ рд░рд╣реЗрдЧрд╛ред рд╕рд┐рдЧрд┐рд▓ рдСрдкреНрдЯ-рдЗрди рд╣реЛрдЧрд╛ рдФрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рд╕реНрдкреЙрдЯ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВрдЧреЗ рдЬрд╣рд╛рдВ рд╡реЗ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЬреЗрдПрд╕ рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╕реНрдЯрдо рддрддреНрд╡ рдХреЛ рдбреЗрдЯрд╛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ref рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

@drcmda

рди рддреЛ рдирдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдЬреЛ рдореМрдЬреВрджрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рддреЛрдбрд╝ рд╕рдХрддреА рд╣реИрдВред

рдХреНрдпрд╛ рдЖрдк рд╕реНрдкрд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХрд╛ рдЗрд╕рд╕реЗ рдХреНрдпрд╛ рдорддрд▓рдм рдерд╛?

рдПрдлрд╡рд╛рдИрдЖрдИ рдЪрд░реНрдЪрд╛ рдХреЗ рдмрд╛рдж рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рднреА, рдореИрдВрдиреЗ рдЖрд░рдПрдлрд╕реА рдХреЛ рд░рд┐рдПрдХреНрдЯ рдЯреАрдо рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕реБрдЭрд╛рдП рдЧрдП 5 рд╡реЗрдВ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рд╣реИред

@robdodson

рдореИрдВ рдЗрд╕рдХрд╛ рдЬрд┐рдХреНрд░ рдХрд░ рд░рд╣рд╛ рдерд╛:

рд╡рд┐рдХрд▓реНрдк 4: рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд╕реНрддреБ рдЬреЛрдбрд╝реЗрдВ
рджреЛрд╖
рдпрд╣ рдПрдХ рддреЛрдбрд╝рдиреЗ рд╡рд╛рд▓рд╛ рдмрджрд▓рд╛рд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ

рд╡рд┐рдХрд▓реНрдк 5 рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд▓рдЧрддрд╛ рд╣реИред рдпрд╣ рд╣рдореЗрдВ рдЕрднреА "рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд" рдПрдкреАрдЖрдИ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд░реНрдгрдп рд▓рд┐рдП рдмрд┐рдирд╛ рд╕реБрд╡рд┐рдзрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рджреЗрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдЕрднреА рднреА "рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ" рдХреЗ рдЪрд░рдг рдореЗрдВ рд╣реИред рд╣рдо рдЗрд╕реЗ рд╣рдореЗрд╢рд╛ рдХреБрдЫ рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рдлрд┐рд░ рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

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

рдореЗрд░реА рдзрд╛рд░рдгрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХрд╕реНрдЯрдо рддрддреНрд╡ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдВрддрддрдГ рдРрдк-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░/рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдШрдЯрдХреЛрдВ рдореЗрдВ рд▓рдкреЗрдЯрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдпрджрд┐ рд╕рдм рдХреБрдЫ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдШрдЯрдХ рд╣реИ, рддреЛ рдпрд╣ рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреЗрд╣рддрд░ рдкреНрд░рд╡рд╛рд╕рди рд░рдгрдиреАрддрд┐

import XButton from './XButton';

рдФрд░ рдЬреЛ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ

export default ReactDOM.createCustomElementType(...)

рдпрд╣ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдХрд╕реНрдЯрдо рдШрдЯрдХ рдХреЗ рд╕рд╛рде рдПрдХ рд░рд┐рдПрдХреНрдЯ рдШрдЯрдХ рдХреЛ рдмрджрд▓рдиреЗ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рднреА рд╕рдордп рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ (рдпрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ)ред

рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рд▓реЛрдЧ рдЗрдВрдЯрд░рдСрдк рдмрд┐рдВрджреБрдУрдВ рдкрд░ рд░рд┐рдПрдХреНрдЯ рдШрдЯрдХ рдмрдирд╛рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рд╣рдо рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╕рд╣рд╛рдпрдХ рднреА рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рднреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рд▓реЛрдЧ рдЙрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдЙрдирдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдЭрд╛ рдХрд░реЗрдВрдЧреЗред

рдФрд░ рдЕрдВрдд рдореЗрдВ, рдпрджрд┐ рд╣рдо рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдХреЛ рд╕реНрдерд┐рд░ рд╣реЛрддреЗ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдПрдХ рд╡рд┐рдиреНрдпрд╛рд╕-рд░рд╣рд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЕрдкрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдЕрдЧрд▓рд╛ рдХрджрдо рдПрдХ рд╡рд┐рд╕реНрддреГрдд рдкреНрд░рд╕реНрддрд╛рд╡ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд╕рднреА рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреИрд╕рд╛ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдХрд╕реНрдЯрдо рддрддреНрд╡ + рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рд╕рдореНрдореЛрд╣рдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ (рдЬреИрд╕реЗ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд┐рдВрдЧ) рдХрд╛ рдЙрддреНрддрд░ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЕрдзрд░ рдореЗрдВ рд▓рдЯрдХрдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рд╕реБрд╡рд┐рдзрд╛ рд╡рд░реНрдмреЛрд╕рд┐рдЯреА рдХреЛ рдСрдлрд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд▓рд╛рдн рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддреА рд╣реИ .

рдореЗрд░реА рдкрд┐рдЫрд▓реА рдЯрд┐рдкреНрдкрдгреА рд╕реЗ рдирд┐рд░реНрдорд╛рдг, рдХреИрд╕реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ:

const XFoo = ReactDOM.createCustomElementType('x-foo', {
  propName1: {
    propertyName: string | null,
    attributeName: string | null,
    attributeSerializer: function | null,
    eventName: string | null,
  }
  propName2: {
  }
  ...
});

XFoo рдЙрджрд╛рд╣рд░рдг рдкрд░ рдкреНрд░рддреНрдпреЗрдХ рд░рд┐рдПрдХреНрдЯ рдкреНрд░реЛрдк рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рддрдм рд╣реЛрдЧрд╛:

  1. рдпрджрд┐ рдЙрд╕ рдкреНрд░реЛрдк рдХреЗ рд▓рд┐рдП eventName рд╢реВрдиреНрдп рдирд╣реАрдВ рд╣реИ, рддреЛ рдЗрд╕реЗ рдПрдХ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВ рдЬреЛ рдкреНрд░реЛрдк рдорд╛рди (рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ) рдХреЛ рдЖрдордВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред
  2. рдЕрдиреНрдпрдерд╛ рдпрджрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рд░реЗрдВрдбрд░ рдХрд░рдирд╛ рдФрд░ propertyName рд╢реВрдиреНрдп рдирд╣реАрдВ рд╣реИ, рддреЛ рдПрд▓реАрдореЗрдВрдЯ рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЛ рдкреНрд░реЛрдк рд╡реИрд▓реНрдпреВ рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВред
  3. рдЕрдиреНрдпрдерд╛ рдпрджрд┐ attributeName рд╢реВрдиреНрдп рдирд╣реАрдВ рд╣реИ, рддреЛ рддрддреНрд╡ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдХрдбрд╝реЗ рдкреНрд░реЛрдк рдорд╛рди рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВред рдпрджрд┐ attributeSerializer рд╢реВрдиреНрдп рдирд╣реАрдВ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░реЛрдк рд╡реИрд▓реНрдпреВ рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВред рдЕрдиреНрдпрдерд╛, рдмрд╕ '' + propValue ред

рдкреЙрд▓рд┐рдорд░ рдХреЗ рдкреЗрдкрд░-рдЗрдирдкреБрдЯ рддрддреНрд╡ рдореЗрдВ 37 рдЧреБрдг рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдПрдХ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдХреЙрдиреНрдлрд┐рдЧ рддреИрдпрд╛рд░ рдХрд░реЗрдЧрд╛ред

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

  • рдпрджрд┐ рдорд╛рди рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ:
eventName: the prop name,
  • рдЕрдиреНрдпрдерд╛:
propertyName: the prop name,
attributeName: camelCaseToDashCase(the prop name),

рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рд╢рд╛рдпрдж рдШрдЯрдирд╛рдУрдВ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ рд░рдЦрдирд╛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЕрдВрддрд┐рдо рдЯрд┐рдкреНрдкрдгреА рд╕реЗ eventName рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рднреА рдЪреАрдЬрд╝реЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ, рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдИрд╡реЗрдВрдЯ рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдкрдВрдЬреАрдХреГрдд рд╣реЛрдиреЗ рджреЗрдВ:

<XFoo prop1={propValue1} prop2={propValue2} events={event1: functionFoo, event2: functionBar}>
</XFoo>

@gaearon @effulgentsia рдЖрдк рд╡рд┐рдХрд▓реНрдк 1 рдФрд░ рд╡рд┐рдХрд▓реНрдк 5 рдХреЗ рд╕рдВрдпреЛрдЬрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВ?

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

рд╡рд┐рдХрд▓реНрдк 5 рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реЛрдЧрд╛ рдЬреЛ рдЕрдкрдиреЗ рдкреВрд░реЗ рдРрдк рдореЗрдВ рдкреЗрдкрд░-рдЗрдирдкреБрдЯ рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдкрдиреА рдЯреАрдо рдХреЗ рд╕рднреА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреЗ рд╕рдВрдкреВрд░реНрдг рдПрдкреАрдЖрдИ рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

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

рдореБрдЭреЗ рд╡рд┐рдХрд▓реНрдк 1 + рд╡рд┐рдХрд▓реНрдк 5 рд╕рдВрдпреЛрдЬрди рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдмрд╣реБрдд рдкрд╕рдВрдж рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП:

<x-foo prop1={propValue1}>

рдЙрдореНрдореАрдж рдХреЗ рдореБрддрд╛рдмрд┐рдХ рдХрд╛рдо рдХрд░реЗрдЧрд╛: рдкреНрд░реЙрдк1 рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рдХреЗ рд░реВрдк рдореЗрдВ рдФрд░ рдПрдХ (рдбреИрд╢-рдХреЗрд╕реЗрдб) рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рд╣реИред

рдФрд░ рд▓реЛрдЧ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдк 5 рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЙрдкрд░реЛрдХреНрдд рдЙрдирдХреЗ рдЕрдиреБрд░реВрдк рдирд╣реАрдВ рд╣реИред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рд░рд┐рдПрдХреНрдЯ 16 рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╕реЗ рдпрд╣ рдПрдХ рдмрдбрд╝рд╛ рдмрджрд▓рд╛рд╡ рд╣реЛрдЧрд╛ред рдХрд┐рд╕реА рднреА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЙрд╕ рдЯреВрдЯрдиреЗ рдХрд╛ рдЕрдиреБрднрд╡ рдХрд░рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡реЗ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдХрд╕реНрдЯрдо рддрддреНрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рдереЗ рдЬреЛ рдЧреБрдгреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИрдВ), рд╡реЗ рд╡рд┐рдХрд▓реНрдк 5 рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рдПрдХ рдмреНрд░реЗрдХ рд╣реИред рдпрд╣ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдпрд╣ рддрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рд░рд┐рдПрдХреНрдЯ рдЯреАрдо рдкрд░ рдЫреЛрдбрд╝рддрд╛ рд╣реВрдВред

рдЖрд╣, рдЯреНрд░реЗрди рдореЗрдВ рдЗрд╕реЗ рдЬрд▓реНрджреА рд╕реЗ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдпрд╣реА рдорд┐рд▓рддрд╛ рд╣реИ @robdodson ЁЯджтАНтЩВя╕П ... рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдм рд╡рд┐рдХрд▓реНрдк 3 рдХрд╛ рдкреНрд░рд╢рдВрд╕рдХ рдирд╣реАрдВ рд╣реИ рдореИрдВрдиреЗ рдЗрд╕реЗ рдкреНрд░реАрдлрд╝рд┐рдХреНрд╕ рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рд╕рднреА рдкреНрд░реЙрдкреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдкрдврд╝рд╛, рдЗрд╕рд▓рд┐рдП рдореЗрд░реА рдЭрд┐рдЭрдХред

рд╡рд┐рдХрд▓реНрдк 5 рдЙрдЪрд┐рдд рдФрд░ рд╕реАрдзрд╛ рд▓рдЧрддрд╛ рд╣реИред

рдореБрдЭреЗ рдкрд╕рдВрдж рд╣реИ рдЬрд╣рд╛рдВ @effulgentsia рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдХреНрдпрд╛ рдРрд╕рд╛ рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

const XFoo = ReactDOM.createCustomElementType('x-foo', {
  propName1: T.Attribute,
  propName2: T.Event,
  propName3: T.Prop
})

рдпрд╛ рдПрдХ рд╣реА рдкреНрд░реЛрдк рдкрд░ рдХрдИ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдореВрд▓реНрдпрд╡рд╛рди рд╣реИ?

рдореИрдВ рдЗрд╕ рдкреНрд░рд╡рд╛рд╣ рд╕реЗ рд╣рд┐рдЪрдХрд┐рдЪрд╛рдКрдВрдЧрд╛ рд╣рд╛рд▓рд╛рдВрдХрд┐

рдпрджрд┐ рдорд╛рди рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ:
рдЗрд╡реЗрдВрдЯрдирд╛рдо: рдкреНрд░реЛрдк рдирд╛рдо,
рдЕрдиреНрдпрдерд╛:
рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдирд╛рдо: рдкреНрд░реЛрдк рдирд╛рдо,
рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╛рдо: рдХреИрдорд▓рдХреЗрд╕ рдЯреЛрдбреИрд╢рдХреЗрд╕ (рдкреНрд░реЛрдк рдирд╛рдо),

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

@рд▓реАрдЪреЗрдиреЗрд▓рд░ :

рд╕рдорд╕реНрдпрд╛ рд╕рд╛рд░рд╛рдВрд╢ рдХреЗ рд╡рд┐рдХрд▓реНрдк 1 рдкреЗрд╢реЗрд╡рд░реЛрдВ рд╕реЗ рдЙрджреНрдзрд░рдг:

рдкреЙрд▓рд┐рдорд░ рдпрд╛ рд╕реНрдХреЗрдЯ рдЬреИрд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдХреЛрдИ рднреА рддрддреНрд╡ рдЕрдкрдиреА рдЙрдЬрд╛рдЧрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЧреБрдг рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛ред рдЗрди рддрддреНрд╡реЛрдВ рдХреЛ рдЙрдкрд░реЛрдХреНрдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде "рдмрд╕ рдХрд╛рдо" рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╣рд╛рде рд╕реЗ рд▓рд┐рдЦрдиреЗ рд╡рд╛рд▓реЗ рд╡реЗрдирд┐рд▓рд╛ рдШрдЯрдХреЛрдВ рдХреЛ рдЧреБрдгреЛрдВ рдХреЗ рд╕рд╛рде рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ <input> рдЬреИрд╕реЗ рдСрдбрдмреЙрд▓ рдирд╣реАрдВ) HTML5 рддрддреНрд╡ ( <video> , <audio> , рдЖрджрд┐) рдХреНрд░рд┐рдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рддреЛ рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╕рдВрдкрддреНрддрд┐рдирд╛рдо рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдирд╛рдо рджреЛрдиреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╕рдордЭрджрд╛рд░ рд╣реИ: рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд░реНрд╡реЛрддреНрддрдо рдЕрднреНрдпрд╛рд╕ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдорд╛рдорд▓рд╛ рд╣реИред рдФрд░ рд░рд┐рдПрдХреНрдЯ рдХреЛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдЧрд░реВрдХ рдХрд░рдХреЗ, рдпрд╣ рд░рд┐рдПрдХреНрдЯ рдХреЛ рдпрд╣ рддрдп рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рд╕реНрдерд┐рддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ: рдЬреИрд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЧреБрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдФрд░ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рд╕рд░реНрд╡реЛрддреНрддрдо рдЕрднреНрдпрд╛рд╕ рдХрд╛ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХреБрдЫ рдЧреБрдг рдмрд┐рдирд╛ рд╕рдВрдмрдВрдзрд┐рдд рдЧреБрдгреЛрдВ рдФрд░/рдпрд╛ рдХреБрдЫ рдЧреБрдгреЛрдВ рдХреЗ рдмрд┐рдирд╛ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╣реИрдВ, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рддрд╛рдХрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛-рдХрдо-рдЧреБрдг рдПрд╕рдПрд╕рдЖрд░ рдФрд░ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рджреМрд░рд╛рди рдкреНрд░рд╕реНрддреБрдд рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛ рд╕рдХреЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди -рд▓реЗрд╕-рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯреНрд╕ рдХреЛ setAttribute () рдХреЗ рд╕рд╛рде рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЖрдкрдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд╕рд╛рде, рдпрд╣ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЭрдВрдбреЗ рдХреЛ рдорд┐рд▓рд╛рдХрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ:

propName1: T.Property | T.Attribute,

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдХрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╛рдо рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдирд╛рдо рд╕реЗ рдЕрд▓рдЧ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреИрдорд▓рдХреЗрд╕ рд╕реЗ рдбреИрд╢-рдХреЗрд╕)ред рди рд╣реА рдпрд╣ рдПрд╕рдПрд╕рдЖрд░ рдХреЗ рджреМрд░рд╛рди рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдореГрджреНрдз рд╡рд╕реНрддреБ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ ("[рдСрдмреНрдЬреЗрдХреНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ]" рдХрд╛ рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИ)ред

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдореИрдВ рдХрд┐рд╕реА рдИрд╡реЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░реЛрдк рдЪрд╛рд╣рддрд╛ рд╣реВрдВ

рд╣рд╛рдБ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рднреА рдЗрд╕рд╕реЗ рд╕рд╣рдордд рд╣реВрдБ, рдЗрд╕рд▓рд┐рдП рдЕрдиреБрд╡рд░реНрддреА рдЯрд┐рдкреНрдкрдгреА ред рдЗрд╕рдХреЗ рд╕рд╛рде рдореЗрд░реА рдЭрд┐рдЭрдХ рдХреЛ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рдореЗрд░реЗ рдкрд╣рд▓реЗ рдХреЗ рд╕реБрдЭрд╛рд╡ рдХреЗ рдХрдо рд╡рд░реНрдмреЛрдЬрд╝ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдПрдХ рд╡рд┐рдЪрд╛рд░ рд╣реИ:

const XFoo = ReactDOM.createCustomElementType('x-foo', {
  UNREFLECTED_ATTRIBUTES: [
    'my-attr-1',
    'my-attr-2',
  ],
  UNREFLECTED_PROPERTIES: [
    'myProp1',
    'myProp2',
  ],
  REFLECTED_PROPERTIES: {
    // This is default casing conversion, so could be omitted.
    someVeryLongName1: 'some-very-long-name-1',

    // In case anyone is still using all lowercase without dashes.
    someVeryLongName2: 'someverylongname2',

    // When needing to define a function for serializing a property to an attribute.
    someRichData: ['some-rich-data', JSON.stringify],
  },
});

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

рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ @effulgentsia

рдореБрдЭреЗ рдЖрдкрдХрд╛ рджреВрд╕рд░рд╛ рдЙрджрд╛рд╣рд░рдг рдкрд╕рдВрдж рд╣реИ рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдпрд╣ рд╕рдВрдпреЛрдЬрди рд╡рд┐рд╕реНрдлреЛрдЯ рдХреЗ рд▓рд┐рдП рдЦреБрд▓рд╛ рдирд╣реАрдВ рд╣реИ рдпрджрд┐ рдЕрдзрд┐рдХ рдкреНрд░рдХрд╛рд░ рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдЕрд▓рд╛ рдШрдЯрдирд╛рдПрдВ + рдЬреЛ рдХреБрдЫ рднреА рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ?

- UNREFLECTED_ATTRIBUTES
- UNREFLECTED_PROPERTIES
- UNREFLECTED_EVENTS
- REFLECTED_PROPERTIES_ATTRIBUTES
- REFLECTED_PROPERTIES_EVENTS
- REFLECTED_ATTRIBUTES_EVENTS
- REFLECTED_PROPERTIES_ATTRIBUTES_EVENTS
...

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдХрд┐рд╕реА рдШрдЯрдирд╛ рдХреЛ рдХрд┐рд╕реА рдкреНрд░реЛрдк рдпрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде рдорд┐рд╢реНрд░рд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ ЁЯдФ рд╡рд┐рд╢реЗрд╖рддрд╛ рдФрд░ рдкреНрд░реЛрдк рд╢рд╛рдпрдж рдХреЗрд╡рд▓ рд╡рд╣реА рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬрд┐рдирдХреА рдЖрдк рдирдХрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рд░рд┐рдПрдХреНрдЯ рдФрд░ рд╡реЗрдм рдХрдВрдкреЛрдиреЗрдВрдЯ рд╕рдореБрджрд╛рдп рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░реНрд╡реЛрддреНрддрдо рдЕрднреНрдпрд╛рд╕ рдкрд░ рд╕рдВрд░реЗрдЦрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реИред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдпрд╣рд╛рдБ рдПрдХ рд░рд╛рдп рд░рдЦрдиреЗ рд╕реЗ рдХрд╕реНрдЯрдо рддрддреНрд╡ рд▓реЗрдЦрдХреЛрдВ рдХреЛ рд╕рд╣реА рджрд┐рд╢рд╛ рдореЗрдВ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЕрдкрдирд╛рдиреЗ рдФрд░ рд╡рдЬрди рдХреЗ рдХрд╛рд░рдг рдЗрд╕рдХреА рд░рд╛рдп рд╣реИред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВрдиреЗ рд╡рд┐рдХрд▓реНрдк 4 рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд▓рд┐рдЦрд╛ рд╣реИ, рдореИрдВ рд╣рдореЗрд╢рд╛ рдЧреБрдгреЛрдВ рдФрд░ рдШрдЯрдирд╛рдУрдВ рдХреЛ рдЧреБрдгреЛрдВ рд╕реЗ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рджреНрд╡рд╛рд░рд╛ рдкрдХрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реВрдВред рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рдореИрдВ рд╡рд┐рдХрд▓реНрдк 1 рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ред рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдПрд╕реНрдХреЗрдк рд╣реИрдЪ рдХреЗ рд╕рд╛рде рд╡рд┐рдХрд▓реНрдк 2 рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ред

рд╡рд┐рдХрд▓реНрдк 1 рдЖрджрд░реНрд╢ рд╣реИ, рд▓реЗрдХрд┐рди рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдЧреБрдг (рдПрд░рд┐рдпрд╛ / рдбреЗрдЯрд╛) рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдЕрдиреБрдорд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдФрд░ рдпрджрд┐ рдХреЛрдИ рдХрд┐рдирд╛рд░реЗ-рдорд╛рдорд▓реЗ рд╣реИрдВ рдЬрд╣рд╛рдБ рддрддреНрд╡реЛрдВ рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рд╕рдВрдкрддреНрддрд┐, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рдХрд╛рд░рдг рд╕реЗ рдПрдХ рдХреЛ рд▓рд╛рдЧреВ рди рдХрд░реЗрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдРрд╕рд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИ рдЬрд┐рд╕ рдкрд░ рд╕рд╛рд╡рдзрд╛рдиреА рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рджреАрд░реНрдШрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рд╡рд┐рдХрд▓реНрдк 2 рдмреЗрд╣рддрд░ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдЧреИрд░-рддреЛрдбрд╝рдиреЗ рд╡рд╛рд▓рд╛ рдкрд░рд┐рд╡рд░реНрддрди рд╣реИред рдпрд╣ рдЙрди рд╕рднреА рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдЬрд╣рд╛рдВ рдХрд╕реНрдЯрдо рддрддреНрд╡ рдкрд░рд┐рднрд╛рд╖рд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкрдВрдЬреАрдХреГрдд рд╣реИ (рдпрд╛ рдЧреБрдг рд╕реЗрдЯ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд▓рд┐рдП рдкреВрд░реНрд╡ рдХрд▓рд╛ Preact (cc @developit) рд╣реИ рдФрд░ рдЗрд╕рдиреЗ рдЕрдм рддрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИред рдЗрд╕ рдкрде рдкрд░ рдиреАрдЪреЗ рдЬрд╛рдиреЗ рд╕реЗ рдПрдХ рдпрдереЛрдЪрд┐рдд рд░реВрдк рд╕реЗ рдордЬрдмреВрдд, рдЧреИрд░-рдмреНрд░реЗрдХрд┐рдВрдЧ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдорд┐рд▓рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рд╕рдлрд▓ рд░рд┐рдПрдХреНрдЯ рд╕рдВрд╕реНрдХрд░рдг рджреНрд╡рд╛рд░рд╛ рд╕рд┐рджреНрдз рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рдЬреНрдпрд╛рджрд╛рддрд░ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдХреБрдЫ рднреА рд╣реЛ, рддреЛ рдпрд╣ рд░рд┐рдПрдХреНрдЯ рдХреЛ рдПрдХ рдЕрд▓реНрдкрдХрд╛рд▓рд┐рдХ рд╕рдорд╛рдзрд╛рди рджреЗрддрд╛ рд╣реИ рдЬрдмрдХрд┐ рджреАрд░реНрдШрд╛рд╡рдзрд┐ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП (рд╕реНрдерд┐рддрд┐ s ?) рдЬрд╣рд╛рдВ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ - рдХрд╕реНрдЯрдо рддрддреНрд╡ рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреА рд╕реНрдердЧрд┐рдд рд▓реЛрдбрд┐рдВрдЧ рдФрд░ рдХреЛрдИ рдЕрдиреНрдп рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдХрд╡рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ - рдПрдХ рдПрд╕реНрдХреЗрдк рд╣реИрдЪ рдЬреИрд╕реЗ рдХрд┐ рд╡реГрджреНрдзрд┐рд╢реАрд▓ рдбреЛрдо рдиреЗ рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ @effulgentsia рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ x рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ред рдпрджрд┐ рдЙрдкрднреЛрдХреНрддрд╛ рдЗрд╕реЗ рдкреНрд░рддрд┐-рдХрд╕реНрдЯрдо-рддрддреНрд╡ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╡реЗ рдЕрднреА рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдХрд╛рд░реНрдп рд╣реИред рдпрд╣ рд░рд┐рдПрдХреНрдЯ рдХреЛ рдПрдХ рд░рд╛рдп рд░рдЦрдиреЗ, рд╣реИрдЪ рд╕реЗ рдмрдЪрдиреЗ рдФрд░ рд╕рднреА рдПрдЬ-рдХреЗрд╕ рдХреЗ рд▓рд┐рдП рдЙрдкрднреЛрдХреНрддрд╛ рдХреЛ рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд╕реМрдВрдкрдХрд░ рд╕рднреА рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓реЛрдВ рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рднреА рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ @Developit рдХреЗ рд╕рд╛рде Preact рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рд╣реИред Preact/React рдХреЗ рдмреАрдЪ рд╕рдВрд░реЗрдЦрдг рдпрд╣рд╛рдБ рдПрдХ рдмрдбрд╝реА рдЬреАрдд рд╣реЛрдЧреАред

рднрд╡рд┐рд╖реНрдп рдХреЗ HTML рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЪрд┐рдВрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рд╣рд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╣рд╛рдБ рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЙрди ReactDOM.defineCustomElementProp() рдХреЙрд▓ рдХреЛ рдХрд╕реНрдЯрдо рддрддреНрд╡ рд▓реЗрдЦрдХ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП JS рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

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

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

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

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

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

рдореВрд▓ рд░реВрдк рд╕реЗ: рдпрджрд┐ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╣рд░ рдмрд╛рд░ рдХрд┐рд╕реА рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╕рдВрдкрддреНрддрд┐ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪрдирд╛ рд╕рдВрднрд╡ рд╣реИ, рддреЛ рдореИрдВ рдЙрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ред рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд╡рд┐рдХрд▓реНрдк 5 рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рд▓рдЪреАрд▓рд╛ рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде-рд╕рд╛рде 3 рдФрд░ 4 рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдПрд░реНрдЧреЛрдиреЛрдорд┐рдХ рд╣реИред

рд╡рд┐рдХрд▓реНрдк 1 рдФрд░ 2 рд╕рд░реНрд╡рд░ рд░реЗрдВрдбрд░рд┐рдВрдЧ (рдПрдЪрдЯреАрдПрдордПрд▓ рдкреАрдврд╝реА) рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╡рд┐рдХрд▓реНрдк 2 рд╡реЗрдм рдШрдЯрдХ рд▓реЗрдЦрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдкрдЧреНрд░реЗрдб рдЦрддрд░реЗ рднреА рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЕрдм рдореМрдЬреВрджрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рдорд╛рди рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдЬреЛрдбрд╝рдирд╛ рдПрдХ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рд╣реИред рдпрджрд┐ рд╣рдо рддрдп рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ SSR рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИ, рддреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рд╡рд┐рдХрд▓реНрдк 1 рдмрд╣реБрдд рдЖрдХрд░реНрд╖рдХ рд╣реИред рдореИрдВ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдБ рдЕрдЧрд░ рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рд╡реНрдпрд╛рдкрдХ рд╣реЛрдЧрд╛ - рдХреНрдпрд╛ рдШрдЯрдХ рд▓реЗрдЦрдХ рдЧреБрдгреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдм рдХреБрдЫ рдЙрдЬрд╛рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ?

bikeshedding рдореЗрдВ рдмрд╣реБрдд рдЧрд╣рд░рд╛ рд╣реЛ рд░рд╣реА рдмрд┐рдирд╛ @treshugart, рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рджрд┐рдЦрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреИрд╕реЗ рдЖрдк рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "рдЕрдм рдмрдЪрдиреЗ рдХрд╛" рдЙрдореНрдореАрдж рдереА рд╣реИрдВ? рдЫрджреНрдо рдХреЛрдб рдареАрдХ рд╣реИред рдмрд╕ рдЗрд╕рд▓рд┐рдП рд╣рдо рд╕рдм рдПрдХ рд╣реА рдкреГрд╖реНрда рдкрд░ рд╣реИрдВред

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ @sophiebits рдЕрднреА рдЖрдкрдХрд╛ рдЙрддреНрддрд░ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВред рдореИрдВ рдХреБрдЫ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдХреБрдЫ рдФрд░ рдмрд╛рд░ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж рдЙрдирдХрд╛ рдЬрд╡рд╛рдм рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдЗрд╕ рдкрд░ рддреБрд░рдВрдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ:

рдореИрдВ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдБ рдЕрдЧрд░ рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рд╡реНрдпрд╛рдкрдХ рд╣реЛрдЧрд╛ - рдХреНрдпрд╛ рдШрдЯрдХ рд▓реЗрдЦрдХ рдЧреБрдгреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдм рдХреБрдЫ рдЙрдЬрд╛рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ?

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

рдЕрдЧрд░ рдХреЛрдИ рд╡реИрдирд┐рд▓рд╛ рд╡реЗрдм рдШрдЯрдХ рдХреЛ рд╣рд╛рде рд╕реЗ рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реИ рддреЛ рдРрд╕рд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ рдЬреЛ рдЙрдиреНрд╣реЗрдВ рдЧреБрдгреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдм рдХреБрдЫ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рд╣рдо рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рд╣рдорд╛рд░реЗ рд╕рд░реНрд╡реЛрддреНрддрдо рдЕрднреНрдпрд╛рд╕ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдФрд░ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдРрд╕рд╛ рдХрд░реЗрдВ ред

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

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

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

<x-foo long-name={val} />

рд▓реЗрдХрд┐рди "рдЧреБрдг рдХрд░реЗрдВ" рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рдпрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╣реИ рдпрджрд┐ рдкреНрд░реЛрдкрдирд╛рдо рдореЗрдВ рдбреИрд╢ рдирд╣реАрдВ рд╣реИ рдФрд░ рдпрджрд┐ рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рддреЛ "рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдХрд░реЗрдВ"?

@robdodson : рдХреНрдпрд╛ рдЖрдк рд╡рд╣рд╛рдВ рдХрд┐рд╕реА рднреА рдХрд╕реНрдЯрдо рддрддреНрд╡ рдврд╛рдВрдЪреЗ рдпрд╛ рдкреНрд░рдерд╛рдУрдВ рд╕реЗ рдЕрд╡рдЧрдд рд╣реИрдВ рдЬрд╣рд╛рдВ рд▓реЛрдЧреЛрдВ рдХреЗ рдкрд╛рд╕ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдВрдкрддреНрддрд┐ рд╕реЗ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЖрд╡рд░рдг рд╣реЛрдВрдЧреЗ, рдмрд┐рдирд╛ рдбреИрд╢ рдХреЗ? рдпрд╛рдиреА, longname рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде longName рд╕рдВрдкрддреНрддрд┐? рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд HTML рддрддреНрд╡реЛрдВ рдФрд░ рд╡реИрд╢реНрд╡рд┐рдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ (рдЬреИрд╕реЗ, contenteditable => contentEditable ) рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рдкреИрдЯрд░реНрди рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдЕрдм рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рд╣рддреЛрддреНрд╕рд╛рд╣рд┐рдд рд╣реИ рдХрд╕реНрдЯрдо рддрддреНрд╡ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкреЙрд▓рд┐рдорд░ рдФрд░ рд╕реНрдХреЗрдЯ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдпрджрд┐ рдпрд╣ рдЕрднреА рднреА рдПрдХ рдореБрджреНрджрд╛ рд╣реИ, рддреЛ рдореМрдЬреВрджрд╛ JSX рдХреЗ рд╕рд╛рде:

<x-foo longname={val} />

рд╕рдВрдкрддреНрддрд┐ рд╕реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдпрджрд┐ рд╕рдВрдкрддреНрддрд┐ longName ред

@effulgentsia рдореИрдВ рдХреЗрд╡рд▓ рд╕реНрдХреЗрдЯ рдХреЗ рд▓рд┐рдП рдмреЛрд▓ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдХреЗрд╡рд▓ HTML рд▓рд┐рдЦрддреЗ рд╕рдордп рд╡рд┐рд╢реЗрд╖рддрд╛ API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВ, рдЬреЛ - рд╕рднреА рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдФрд░ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП - рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рд░реВрдк рдореЗрдВ рднреА рд╡рд░реНрдЧреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк JS рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреБрдЫ рднреА рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдкреНрд░реЙрдкреНрд╕ рд╕реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдорд╛рд░рд╛ props рдПрдкреАрдЖрдИ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рд╕реЗ рдПрдХ-рддрд░рдлрд╝рд╛ рд╕рд┐рдВрдХ / рдбрд┐рд╕реЗрд░рд┐рдПрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдирд╛рдо рдХреЛ рдбреИрд╢-рдХреЗрд╕ рдХрд░рдХреЗ рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ (CamelCase рдКрдВрдЯ-рдХреЗрд╕ рдмрди рдЬрд╛рддрд╛ рд╣реИ, рдЖрджрд┐)ред рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕рдордЧреНрд░ рд░реВрдк рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ рд▓реЗрдХрд┐рди рд╣рдо рдЙрдкрд░реЛрдХреНрдд рд╕рд░реНрд╡реЛрддреНрддрдо рдЕрднреНрдпрд╛рд╕ рдХреЛ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рдЬреИрд╕рд╛ рдХрд┐ рдХрдИ рд▓реЛрдЧреЛрдВ рдиреЗ рдХрд╣рд╛ рд╣реИ, рдкреНрд░реЙрдкреНрд╕ SSR рдХреЛ рдХрдард┐рди рдмрдирд╛рддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдПрдХ рд╡реИрдз рдЪрд┐рдВрддрд╛ рдХрд╛ рд╡рд┐рд╖рдп рд╣реИред рдЪреВрдВрдХрд┐ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╡рд┐рдХрд▓реНрдк 1 рдХреЛ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗ, рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдлрд╝реЙрд▓рдмреИрдХ/рдореИрдкрд┐рдВрдЧ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реБрдП рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдкреНрд░реЙрдкреНрд╕ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ @sophiebits рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд╕рд╛рде рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдФрд░ рдЖрдЧреЗ

рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЖрдк рд╕реНрдХреЗрдЯ рдХреЗ рд╕рд╛рде рд╕рд░реНрд╡рд░ рд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рддрдХ рд▓реЗ рдЬрд╛рдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдФрд░ рдкреНрд░реЙрдкреНрд╕ рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдФрд░ рдХреЛрдИ рднреА рдХрд╕реНрдЯрдо рддрддреНрд╡ рдЬреЛ renderedCallback() рдФрд░ props рдФрд░ / рдпрд╛ state рдмрд╕рддрд╛ рд╣реИред рдХрд╕реНрдЯрдо рддрддреНрд╡ рд╕реНрддрд░ рдкрд░ рдРрд╕рд╛ рдХрд░рдирд╛ рддреБрдЪреНрдЫ рд╣реИред рдпрджрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рд░реНрд╡рд░ рдкрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рд╕рдбрд╝рдХ рд╕реЗ рдиреАрдЪреЗ рдЪрд▓реА рдЧрдИ, рддреЛ рдкреБрдирд░реНрдЬрд▓реАрдХрд░рдг рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рд╕рдорд╛рди рд╣реЛрдЧрд╛ред рд╕реНрдХреЗрдЯ рдШрдЯрдХ рд▓реЗрдЦрдХреЛрдВ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдХрд░рддреЗ рд╣реИрдВ ' рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрдирдХреЗ рд▓рд┐рдП рдЕрдХреНрд░рдорд╛рдВрдХрди рддрд░реНрдХ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ред

@robdodson рдореИрдВ

const isBrowser = true; // this would actually do the detection
const oldAttributeHook = ReactDOM.setAttribute;

// This is much like the IDOM impl but with an arguably more clear name.
ReactDOM.setAttribute = (element, name, value) => {
  // This is essentially option 2, but with the added browser check
  // to keep attr sets on the server.
  if (isBrowser && name in element) {
    element[name] = value;
  } else {
    oldAttributeHook(element, name, value);
  }
};

@ рд╕реЛрдлреАрдмрд┐рдЯреНрд╕

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

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

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЛ рд╡рд┐рдХрд▓реНрдк 2 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рдХрд▓реНрдк 2 рдореЗрдВ рдХреБрдЫ рдЕрдЪреНрдЫреЗ рдмреЛрдирд╕ рд╣реИрдВ рдФрд░ рдкреНрд░реАрдПрдХреНрдЯ рдЗрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рд╕рд╛рдмрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИред

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

+1, рдореИрдВ рдЗрд╕ рджрд┐рд╢рд╛ рдореЗрдВ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реВрдВред


@effulgentsia

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

рд╡рд┐рдХрд▓реНрдк 2 рдЗрд╕реЗ рд╣рд▓ рдХрд░реЗрдЧрд╛ :)
рдЕрдиреНрдпрдерд╛ рд╢рд╛рдпрдж рд╡рд┐рдХрд▓реНрдк 1 рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдиреБрдорд╛рдиреА рдпреБрдЧреНрдорд┐рдд рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдЬреЛ рдХрд┐ рдбреИрд╢-рдЖрд╡рд░рдг рд╡рд╛рд▓реЗ рдЧреБрдгреЛрдВ рдХреЛ рдХреИрдорд▓рдХреЗрд╕реЗрдб рдЧреБрдгреЛрдВ рдореЗрдВ рдореИрдк рдХрд░рддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди "рдЧреБрдг рдХрд░реЗрдВ" рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рдпрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╣реИ рдпрджрд┐ рдкреНрд░реЛрдкрдирд╛рдо рдореЗрдВ рдбреИрд╢ рдирд╣реАрдВ рд╣реИ рдФрд░ рдпрджрд┐ рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рддреЛ "рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдХрд░реЗрдВ"?

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирд╛рдо рдореЗрдВ рдбреИрд╢ рд╣реЛрдиреЗ рдкрд░ Preact рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реЗрдЯ рдХрд░ рджреЗрдЧрд╛ ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╡рд┐рдХрд▓реНрдк 2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ long-name in рдЪреЗрдХ рдкрд╛рд╕ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ ( рд╕реНрд░реЛрдд ) рдкрд░ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддрд╛ рд╣реИред

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

рдХреНрдпрд╛ рдЖрдк рдХрд┐рд╕реА рдРрд╕реЗ рдХрд╕реНрдЯрдо рддрддреНрд╡ рдврд╛рдВрдЪреЗ рдпрд╛ рдкреНрд░рдерд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рд▓реЛрдЧреЛрдВ рдХреЗ рдкрд╛рд╕ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдВрдкрддреНрддрд┐ рд╕реЗ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЖрд╡рд░рдг рд╣реЛрдВрдЧреЗ, рдмрд┐рдирд╛ рдбреИрд╢ рдХреЗ?

рдореЗрд░реА рдЬрд╛рдирдХрд╛рд░реА рдореЗрдВ рдирд╣реАрдВред рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд▓рд┐рдП рдпрд╣ рдЬрд╛рдирдиреЗ рдХрд╛ рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ рдКрдВрдЯ рдХрд╛ рдорд╛рдорд▓рд╛ рдХрд╣рд╛рдВ рд╣реИред рдпрджрд┐ рдЖрдк рдПрдХ рд╡реЗрдирд┐рд▓рд╛ рд╡реЗрдм рдШрдЯрдХ рдХреЛ рд╣рд╛рде рд╕реЗ рд▓рд┐рдЦ рд░рд╣реЗ рдереЗ рддреЛ рдЖрдк longname/longName рдФрд░ рдХреЗрд╡рд▓ рд╡рд┐рдХрд▓реНрдк 2 рдЖрдкрдХреЛ рдмрдЪрд╛рдПрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ longname рд╕рдВрдкрддреНрддрд┐ рдирд╣реАрдВ рдорд┐рд▓реЗрдЧреА, рд▓реЗрдХрд┐рди рдпрд╣ рдкрд╣рд▓реЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЧрдП рдкрд░ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛ longname рд╡рд┐рд╢реЗрд╖рддрд╛ред

рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рдХреНрдпрд╛ рд╣реИ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░реАрдПрдХреНрдЯ, рдЕрдВрддрд┐рдо рдЙрдкрд╛рдп рдХреЗ рд░реВрдк рдореЗрдВ, рдЙрд╕ рд╕рдВрдкрддреНрддрд┐ рдкрд░ toLowerCase() рдХреЙрд▓ рдХрд░реЗрдЧрд╛ рдЬрд┐рд╕реЗ рд╡рд╣ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реЗрдЯ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ <x-foo longName={bar}/> SSR'ing рдХрд░ рд░рд╣реЗ рдереЗ рддреЛ рдпрд╣ longname="" рд╡рд┐рд╢реЗрд╖рддрд╛ рдкрд░ рднреА рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛ред


@treshugart

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдлрд╝реЙрд▓рдмреИрдХ/рдореИрдкрд┐рдВрдЧ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реБрдП рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдкреНрд░реЙрдкреНрд╕ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ @sophiebits рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд╕рд╛рде рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдФрд░ рдЖрдЧреЗ

рд╣рд╛рдБ, рдФрд░ рд╣рд╛рдБред

рдореИрдВ рд╡рд╣реА рдХрд╛рдо рдХрд░реВрдВрдЧрд╛ рдЬреЛ рд╡реГрджреНрдзрд┐рд╢реАрд▓ рдбреЛрдо рдХрд░ рд░рд╣рд╛ рд╣реИ

рдХреНрдпрд╛ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ (рдпрд╛ рдЙрдирдХреЗ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ) рдХреЛ рдЗрд╕рдореЗрдВ рдорд┐рд╢реНрд░рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА?

рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ, рдЪрд░реНрдЪрд╛ рдореЗрдВ рднрд╛рдЧ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рд╕рднреА рдХрд╛ рдзрдиреНрдпрд╡рд╛рдж, рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рдлреА рд▓рдВрдмрд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИ тЭдя╕П

рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ https://github.com/facebook/react/issues/11347#issuecomment -339858314 рдореЗрдВ рдЕрдВрддрд┐рдо рдЙрджрд╛рд╣рд░рдг рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрддреНрдпрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕ рддрд░рд╣ рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдЕрддрд┐рд╡реНрдпрд╛рдкреА рд╣реБрдХ рдкреНрд░рджрд╛рди рдХрд░реЗрдВрдЧреЗред

@gaearon рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЯреНрд░реЗ рд╕рд┐рд░реНрдл рдмрдВрджрд░-рдкреИрдЪ рдХреЗ рд░реВрдк рдореЗрдВ рд╢реБрджреНрдз рдкрд░рд┐рд╡рд░реНрддрди рджрд┐рдЦрд╛ рд░рд╣рд╛ рдерд╛, рд╕рдВрднрд╡рддрдГ рдЗрд╕реЗ рд░рд┐рдПрдХреНрдЯрдбреЙрдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╣реА рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред

рд╣рд╛рд▓ рдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЖрдк рд╕рднреА рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВ?

  1. рдмреАрд╕реА рдХреЗ рд▓рд┐рдП, рд░рд┐рдПрдХреНрдЯ рдореЗрдВ рд▓реЛрдЕрд░рдХреЗрд╕ рдХрд╕реНрдЯрдо рддрддреНрд╡ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рди рдмрджрд▓реЗрдВред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, JSX рдЬреИрд╕реЗ <x-foo ... /> , React 17 рдореЗрдВ рдЙрд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдЧрд╛ рдЬреИрд╕рд╛ рдХрд┐ 16 рдореЗрдВ рдерд╛ред рдпрд╛, рдпрджрд┐ _minor_ рдмрдЧ рдлрд┐рдХреНрд╕ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВ, рддреЛ рдЙрди рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рдЦреЛрд▓реЗрдВред

  2. рдмреЗрд╣рддрд░ рдХрд╕реНрдЯрдо рдПрд▓рд┐рдореЗрдВрдЯ рд╕реЗрдореЗрдиреНрдЯрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рд░рд┐рдПрдХреНрдЯ рдХрдВрдкреЛрдиреЗрдВрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд┐рдЧ-рд▓реЗрд╕ рдПрдкреАрдЖрдИ рдЬреЛрдбрд╝реЗрдВред рдЬреИрд╕реЗ, const XFoo = ReactDOM.customElement('x-foo'); ред

  3. рдКрдкрд░ рдмрдирд╛рдП рдЧрдП рдШрдЯрдХ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╢рдмреНрджрд╛рд░реНрдереЛрдВ рдХреЛ рдирд┐рдпреЛрдЬрд┐рдд рдХрд░реЗрдВ:

  4. XFoo рдкрд░ рдХрд┐рд╕реА рднреА рдкреНрд░реЛрдк рдХреЗ рд▓рд┐рдП рдЬреЛ рдПрдХ рдЖрд░рдХреНрд╖рд┐рдд рд░рд┐рдПрдХреНрдЯ рдкреНрд░реЛрдк рдирд╛рдо рд╣реИ ( children , ref , рдХреЛрдИ рдЕрдиреНрдп?), рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд░рд┐рдПрдХреНрдЯ рд╢рдмреНрджрд╛рд░реНрде рд▓рд╛рдЧреВ рдХрд░реЗрдВ (рдЗрд╕реЗ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдпрд╛ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рди рдХрд░реЗрдВ рдХрд╕реНрдЯрдо рддрддреНрд╡ рдбреЛрдо рдиреЛрдб рдкрд░)ред
  5. HTML рдХрд▓реНрдкрдирд╛ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рд╕реА рднреА HTMLElement рд╡реИрд╢реНрд╡рд┐рдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдпрд╛ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП ( data-* рдФрд░ aria-* ), рдЙрди рдкреНрд░реЙрдкреНрд╕ рдХреЗ рд╕рд╛рде рд╡рд╣реА рдХрд░реЗрдВ рдЬреЛ React рдЙрдирдХреЗ рд╕рд╛рде рдХрд░реЗрдЧрд╛ рдпрджрд┐ рд╡реЗ div рдкрд░ рдереЗ <XFoo data-x={} className={} contentEditable={} /> рдкрд░ DOM рдиреЛрдб рдкрд░ рдкреНрд░реЙрдкреНрд╕ рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ <div data-x={} className={} contentEditable={} /> (рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рдФрд░ SSR рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП) рдХреЗ рд╕рдорд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
  6. XFoo рдкрд░ рдХрд┐рд╕реА рднреА рдкреНрд░реЛрдк рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕рдореЗрдВ рдбреИрд╢ (рдКрдкрд░ рдЕрдиреБрдордд рд╡реИрд╢реНрд╡рд┐рдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛) рд╢рд╛рдорд┐рд▓ рд╣реИ, рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд░реЗрдВ (рдбреЗрд╡рд▓рдкрд░ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ XFoo рдПрдХ рд╕рдВрдкрддреНрддрд┐-рдХреЗрдВрджреНрд░рд┐рдд рд╣реИ, рди рдХрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛-рдХреЗрдВрджреНрд░рд┐рдд, API) рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░реЗрдВ (рди рддреЛ рдЗрд╕реЗ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдФрд░ рди рд╣реА рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд░реЗрдВ)ред
  7. XFoo рдкрд░ рдХрд┐рд╕реА рднреА рдкреНрд░реЛрдк рдХреЗ рд▓рд┐рдП рдЬреЛ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдпрд╛ рдКрдкрд░реА ASCII рдЕрдХреНрд╖рд░ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд╕рд╛рде рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░реЗрдВ (рдФрд░ рд╢рд╛рдпрдж рдЪреЗрддрд╛рд╡рдиреА рдЫреЛрдбрд╝ рджреЗрдВ?) рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдЧреБрдгреЛрдВ рдХреЛ рдирд╛рдо рджреЗрдиреЗ рдХрд╛ рдХреЛрдИ рдЕрдиреБрд╢рдВрд╕рд┐рдд рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рднрд╡рд┐рд╖реНрдп рдХреЗ рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рд▓рд┐рдП рдЙрди рдирд╛рдорд╕реНрдерд╛рдиреЛрдВ рдХреЛ рдЖрд░рдХреНрд╖рд┐рдд рдХрд░реЗрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдиреАрдЪреЗ #4 рджреЗрдЦреЗрдВ)ред
  8. XFoo рдкрд░ рдЕрдиреНрдп рд╕рднреА рдкреНрд░реЙрдкреНрд╕ рдХреЗ рд▓рд┐рдП, рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рд░реЗрдВрдбрд░ рдХрд░рддреЗ рд╕рдордп, рдЗрд╕реЗ DOM рдиреЛрдб рдкрд░ рдПрдХ рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд░реЗрдВред SSR рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдорд╛рди рдЖрджрд┐рдо рд╣реИ, рддреЛ рдЗрд╕реЗ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░реЗрдВ; рдпрджрд┐ рдЧреИрд░-рдЖрджрд┐рдо рд╣реИ, рддреЛ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдЫреЛрдбрд╝реЗрдВ рдФрд░ рдЗрд╕реЗ рд╣рд╛рдЗрдбреНрд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рдПрдХ рдкреНрд░реЙрдкрд░реНрдЯреА рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд░реЗрдВред рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ SSR рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рд▓рд┐рдП, camelCaseToDashCase рдирд╛рдоред

  9. рдКрдкрд░ #2 рдореЗрдВ рдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрдирд╛рдП рдЧрдП рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП, рдЗрд╡реЗрдВрдЯ рд╢реНрд░реЛрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реЛрдк рдирд╛рдо рдЖрд░рдХреНрд╖рд┐рдд рдХрд░реЗрдВред рдЬреИрд╕реЗ, 'events' рдпрд╛ 'eventListeners' ред рдпрд╛, рдпрджрд┐ рдЙрди рд╕рдВрднрд╛рд╡рд┐рдд рдХрд╕реНрдЯрдо рддрддреНрд╡ рд╕рдВрдкрддреНрддрд┐ рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рд╡рд┐рд░реЛрдз рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ '_eventListeners' рдпрд╛ 'EventListeners' ред XFoo рдХрд╛ рд░рд┐рдПрдХреНрдЯрдбреЙрдо-рдирд┐рд░реНрдорд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЗрди рдИрд╡реЗрдВрдЯ рд╢реНрд░реЛрддрд╛рдУрдВ рдХреЛ DOM рдиреЛрдб рдкрд░ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдЧрд╛ред

  10. рдХрд┐рдирд╛рд░реЗ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдХрд╕реНрдЯрдо рддрддреНрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЙрдкрд░реЛрдХреНрдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд╛рдВрдЫрд┐рдд рдпрд╛ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ), рдРрдк рдбреЗрд╡рд▓рдкрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд░рд┐рдПрдХреНрдЯ рдШрдЯрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╡реЗ рдЬреЛ рднреА рд╡рд┐рд╢реЗрд╖ рдХрд╛рдо рдХрд░ рд╕рдХреЗрдВ рдЙрд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдпрд╛рдиреА, рдЙрдиреНрд╣реЗрдВ ReactDOM.customElement() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдпрд╛ рд╡реЗ рдЗрд╕реЗ рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВред

  11. рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рд╡реНрдпрд╡рд╣рд╛рд░ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЙрдирдХрд╛ JSX рд▓реЛрдЕрд░рдХреЗрд╕ рдХрд╕реНрдЯрдо рдПрд▓рд┐рдореЗрдВрдЯ рдирд╛рдореЛрдВ ( <x-foo /> рдмрдЬрд╛рдп <XFoo /> , рдЗрд╕реА рдХрд╛рд░рдг рд╕реЗ HTML рд▓рд┐рдЦрдиреЗ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд▓реЛрдЧ <div> рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ <Div> ), рд╡реЗ рдмрдВрджрд░-рдкреИрдЪ React.createElement() рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдмрдВрджрд░ рдкреИрдЪ рд╣реЛрдЧрд╛: рдмрд╕ рдкрд╣рд▓рд╛ рддрд░реНрдХ рд▓реЗрдВ рдФрд░ рдпрджрд┐ рдпрд╣ рдПрдХ рдХрд╕реНрдЯрдо рддрддреНрд╡ рдирд╛рдо рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЖрдк рдЗрд╕реЗ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдЪрд╛рд╣реЗ рд╡рд╣ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реВрдЪреА рд╣реЛ рдпрд╛ рд╕рднреА рд▓реЛрдЕрд░рдХреЗрд╕ рдЕрдХреНрд╖рд░реЛрдВ рдФрд░ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдбреИрд╢ рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реЛ), рддреЛ ReactDOM.customElement() рдЖрд╣реНрд╡рд╛рди рдХрд░реЗрдВ рдЙрд╕ рдирд╛рдо рдкрд░ React.createElement() рдкрд░ рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд░реЗрдВред

@Developit @gaearon рдпрд╣ рдпрд╛ рддреЛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ "рдорд╛рдирдЪрд┐рддреНрд░рдг" рдЖрд╡рд╢реНрдпрдХ рдерд╛, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╣реБрдХ рдЕрдзрд┐рдХ рдЯрд┐рдХрд╛рдК рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╢реБрджреНрдз рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рджрд┐рдЦрд╛рдирд╛ рднреА рдерд╛ рдпрджрд┐ рдЗрд╕реЗ ReactDOM рдХреЗ рдореВрд▓ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдерд╛, рдЬреИрд╕рд╛ рдХрд┐ рдЬреЗрд╕рди рдиреЗ рдмрддрд╛рдпрд╛ред

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

рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореИрдВ рдЕрдкрдиреЗ <x-foo> рддрддреНрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛, рдФрд░ рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдЗрд╕реЗ рд▓рдкреЗрдЯрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рдЧреБрдгреЛрдВ рдХреЛ рдкрд╛рд╕ рдХрд░ рджреВрдВрдЧрд╛ред

рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ рдореИрдВ рд╡рд┐рдХрд▓реНрдк 1 (рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рдЧреБрдг) рдФрд░ 5 (рдПрд╕рдПрд╕рдЖрд░ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди) рдХреЗ @sohpiebits ' рд╕реБрдЭрд╛рд╡ рдХреЗ рд╕рд╛рде рдЬрд╛рдКрдВрдЧрд╛ ред рдореИрдВ рдЕрднреА рднреА рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рд╢рд╛рдпрдж рд▓реЛрдЧ рдкрд╢реНрдЪрдЧрд╛рдореА рд╕рдВрдЧрддрддрд╛ рдмреЛрдирд╕ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдк 2 (рд╢рд╛рдпрдж рд╡рд┐рдХрд▓реНрдк 2 + 5?) рдкрд░ рдкреБрдирд░реНрд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред

@gaearon рдХреНрдпрд╛ рдЖрдкрдХреА рд░рд╛рдп рдЯреНрд░реЗ рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдкрд░ рдмрджрд▓ рдЬрд╛рддреА рд╣реИ рдпрджрд┐ рдпрд╣ ReactDOM рдХреЛрд░ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ? рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рд╣рдо рдорджрдж рдХрд░реЗрдВрдЧреЗ рддреЛ рд╣рдо рдЙрджрд╛рд╣рд░рдг рдХреЛ рдФрд░ рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВ?

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

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрдпрд╛рд░ рдХрд░рддрд╛ рдерд╛ рдХрд┐ рдХреИрд╕реЗ рд░рд┐рдПрдХреНрдЯ рдЯреАрдо рдиреЗ рд░реЗрдкреЛ рдореЗрдВ рдЕрдВрддрд┐рдо рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рд╛, рдЬреИрд╕реЗ рдХрд┐ _PropTypes_, рдХреЗрд╡рд▓ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд╕реНрд╡рд┐рдЪ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдпреЛрдЬрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдХрд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╛рд╡рд┐рдд рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдореЗрдВ рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдХрд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рддрддреНрд╡

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╛рдзрд╛рди рдЬреЛ рд╣рдо рд╕рднреА рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░реЗрдЧрд╛, рд╡рд╣ рд╣реЛрдЧрд╛ рдЗрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ _steps_, рдПрдкреАрдЖрдИ рдЬреЛрдбрд╝, рдЪреЗрддрд╛рд╡рдиреА рдФрд░ рдмрд╣рд┐рд╖реНрдХрд░рдг рдпрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ред

рд╢рд╛рдпрдж рд╡рд┐рдХрд▓реНрдк 5, рдЪреЗрддрд╛рд╡рдиреА рдХреЗ рд╕рд╛рде, рдмрд╛рдж рдореЗрдВ рд╡рд┐рдХрд▓реНрдк 2 рдЖрд╡рд╢реНрдпрдХ рдЖрд╡рд░рдг рдХреЗ рдмрд╣рд┐рд╖реНрдХрд░рдг рдХреЗ рд╕рд╛рдеред

рд╢рд╛рдпрдж рд╡рд┐рдХрд▓реНрдк 5, рдЪреЗрддрд╛рд╡рдиреА рдХреЗ рд╕рд╛рде, рдмрд╛рдж рдореЗрдВ рд╡рд┐рдХрд▓реНрдк 2 рдЖрд╡рд╢реНрдпрдХ рдЖрд╡рд░рдг рдХреЗ рдмрд╣рд┐рд╖реНрдХрд░рдг рдХреЗ рд╕рд╛рдеред

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдХрд░рдирд╛ рдХрджрдореЛрдВ рдХреА рдПрдХ рдмреЗрд╣рддрд░ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╣реЛрдЧреАред рд╡рд┐рдХрд▓реНрдк 1 рдпрд╛ 2 рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХрдо рдирд╛рдЯрдХреАрдп рдкрд░рд┐рд╡рд░реНрддрди рд╣реИред рдФрд░ рдпрд╣ рдорд╛рдкрдирд╛ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╡реЗрдм рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП SSR рдХрд╣рд╛рдиреА рдХреИрд╕реА рджрд┐рдЦрдиреЗ рд▓рдЧрддреА рд╣реИред рдлрд┐рд░ рд╡рд┐рдХрд▓реНрдк 5 рдХреЗ рд╕рд╛рде рдЕрдиреБрд╕рд░рдг рдХрд░рдирд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдирдпрд╛ рдПрдкреАрдЖрдИ рдФрд░ рдкреНрд░реЙрдХреНрд╕реА/рд░реИрдкрд░ рдШрдЯрдХреЛрдВ рдХреА рдзрд╛рд░рдгрд╛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред

рд╡рд┐рдХрд▓реНрдк 1 рдХреЗ рд╕рд╛рде рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рдлреА рдмрдбрд╝рд╛ BC рдмреНрд░реЗрдХ рд╣реИред рд╡рд┐рдХрд▓реНрдк 2 рдХреЗ рд╕рд╛рде рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рддрддреНрд╡ рдХреЛ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХреЗ рд╕рдордп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЗрд╕рдХреА рджреМрдбрд╝ рдХреА рд╕реНрдерд┐рддрд┐ рд╣реЛрддреА рд╣реИред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИ рдЬрд┐рд╕рдХрд╛ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рд░рд┐рдПрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╡рд┐рдХрд▓реНрдк 5 рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЕрдзрд┐рдХ рд╕реБрд░рдХреНрд╖рд┐рдд, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдЙрдкрдпреЛрдЧреА, рдЧреИрд░-рд╡рд┐рдХрд▓реНрдк -5 рдЙрдкрдпреЛрдЧреЛрдВ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд┐рдХрд▓реНрдк 4 рдХреЗ рд╡реНрдпреБрддреНрдХреНрд░рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕реЗ: рдмрд╕ domProperties рдФрд░ eventListeners рдкреНрд░реЛрдк рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрдВ, рддрд╛рдХрд┐ рдЖрдк рд╕рд╛рдорд╛рди рдХрд░ рд╕рдХреЗрдВ:

<x-foo 
  my-attr1={...} 
  domProperties={{myRichDataProperty: ...}} 
  eventListeners={{'a-custom-element-event':  e => console.log('yo')}} 
/>

рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреАрдЫреЗ рдХреА рдУрд░ рд╕рдВрдЧрдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХреЗ рдЕрдкрд░рдХреЗрд╕ рдЕрдХреНрд╖рд░реЛрдВ рдХреЗ рдХрд╛рд░рдг, domProperties рдФрд░ eventListeners рдорд╛рдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╛рдо рдирд╣реАрдВ рд╣реИрдВред рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рд░рд┐рдПрдХреНрдЯ 16 рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕реЗрдЯрдПрдЯреНрд░рд┐рдмреНрдпреВрдЯ () рдХреЛ рдКрдкрд░реА рдЕрд▓реНрдлрд╝рд╛рдЬрд╝ рд╡рд╛рд▓реЗ рдкреНрд░реЛрдк рдирд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдирд╛рдо рдХреЛ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ; рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреНрдпрд╛ рд░рд┐рдПрдХреНрдЯ 16 рдХреА рднрд╡рд┐рд╖реНрдп рдХреА рдорд╛рдореВрд▓реА рд░рд┐рд▓реАрдЬ рдХрд╕реНрдЯрдо рдПрд▓рд┐рдореЗрдВрдЯ рдкреНрд░реЙрдкреНрд╕ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддреЗ рд╕рдордп рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдХрд╛ рдЙрддреНрд╕рд░реНрдЬрди рдХрд░ рд╕рдХрддреА рд╣реИ рдЬреЛ рдорд╛рдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╛рдо рдирд╣реАрдВ рд╣реИрдВ, рддрд╛рдХрд┐ рд▓реЛрдЧ рд░рд┐рдПрдХреНрдЯ 17 рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЕрдкрдиреА рдХреЗрд╕рд┐рдВрдЧ рдЧрд▓рддрд┐рдпреЛрдВ рдХреЛ рдареАрдХ рдХрд░ рд╕рдХреЗрдВ?

рдмреАрд╕реА рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рд╕рдордЭрдирд╛ рдЖрд╕рд╛рди рд╣реИ: рдпрд╣ рд╡рд┐рд╢реЗрд╖рддрд╛-рдХреЗрдВрджреНрд░рд┐рдд рд╣реИ (рдЕрд░реНрдерд╛рддреН рд░рд┐рдПрдХреНрдЯ рдкреНрд░реЛрдк рдХреЛ рддрддреНрд╡ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ), рдЬреЛ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ рдХрд┐ рддрддреНрд╡ рдХрд╛ рдирд╛рдо рд╕рднреА рд▓реЛрдЕрд░рдХреЗрд╕ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдбреИрд╢ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП HTML-рдХреЗрдВрджреНрд░рд┐рдд рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, domProperties рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рджреБрд░реНрд▓рдн рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЖрдкрдХреЛ рдЧреБрдг рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреИрд╕реЗ рд╕рдореГрджреНрдз рдбреЗрдЯрд╛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рдЬреЛ рд▓реЛрдЧ рдЕрдкрдиреЗ рдорд╛рдирд╕рд┐рдХ рдореЙрдбрд▓ рдХреЛ рд╕рдВрдкрддреНрддрд┐-рдХреЗрдВрджреНрд░рд┐рдд (рдЕрд▓рд╛ рд╡рд┐рдХрд▓реНрдк 1) рдореЗрдВ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрдирдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдХрд▓реНрдк 5 рд╕реНрдЯрд╛рдЗрд▓ рдПрдкреАрдЖрдИ рдЖ рд╕рдХрддрд╛ рд╣реИ:

const XFoo = ReactDOM.customElement('x-foo');
<XFoo prop1={} prop2={} data-foo={} aria-label={} />

рдЗрд╕ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рде, рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░реЛрдк рдХреЛ рдПрдХ рд╕рдВрдкрддреНрддрд┐ (рд╡рд┐рдХрд▓реНрдк 1) рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬреЛ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рддрддреНрд╡ "рдирд╛рдо" (рдПрдХреНрд╕рдлреВ) рднреА рдЬреЗрдПрд╕-рдХреЗрдВрджреНрд░рд┐рдд рд╕рдореНрдореЗрд▓рди рдХрд╛ рдкрд╛рд▓рди рдХрд░ рд░рд╣рд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЕрднреА рднреА рдиреНрдпреВрдирддрдо рд╕рдорд░реНрдерди data-* рдФрд░ aria-* рдкреНрд░реЛрдк рдХреЛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд╣рдо рдпрд╛ рддреЛ рдХреЗрд╡рд▓ рдЙрди рддрдХ рд╕реАрдорд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдХрд┐рд╕реА рднреА рдкреНрд░реЛрдк рдХреЛ рдбреИрд╢ рдХреЗ рд╕рд╛рде рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЧреБрдгред

рдЗрд╕ рдмреАрдЪ, SSR рдХреЗ рд╡рд┐рдХрд▓реНрдк 5 рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди API рдХреЛ ReactDOM.customElement рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ:

const XFoo = ReactDOM.customElement('x-foo', ssrConfiguration);

рд╢рд╛рдпрдж ssrConfiguration @treshugart рдХреА рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ ReactDOM.setAttribute рд╕рдорд╛рди рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?

рддреБрдо рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реЛ?

@effulgentsia рдореБрдЭреЗ рдкрд╕рдВрдж рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рд╡рд┐рдЪрд╛рд░ рдХрд╣рд╛рдБ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рдирд╛рдореЛрдВ рдХреЛ рдереЛрдбрд╝рд╛ рд╕рд╛ рдмрд╛рдЗрдХрд╢реЗрдб рдХрд░рдирд╛: domProps / domEvents ред рдпрд╣ рд╡рд┐рдХрд▓реНрдк 4 рдХреЗ рдмрд╣реБрдд рдХрд░реАрдм рд╣реИред

рдбрдмреНрд▓реВрдЖрд░рдЯреА рдПрд╕рдПрд╕рдЖрд░, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрд╕рдПрд╕рдЖрд░ рдХреЛ рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕реНрд╡рдпрдВ рддрдм рддрдХ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рддрдХ рд░рд┐рдПрдХреНрдЯ рдЙрди рдЧреБрдгреЛрдВ рдХрд╛ рд╕рдореНрдорд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдШрдЯрдХ рд╕реНрд╡рдпрдВ рдХреЛ рдмрджрд▓рддрд╛ рд╣реИ рдпрджрд┐ рдпрд╣ рдЙрдиреНрд╣реЗрдВ рдЯреНрд░реИрдХ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдПрдХ рд╕рд╛рд░ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ рдпрд╣ рдлрд┐рд░ рд╕реЗ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рд╣реИ: https://gist.github.com/treshugart/6eff0da3c0bea886bb56589f743b78a6ред рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдШрдЯрдХ рд╕рд░реНрд╡рд░ рдкрд░ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдЙрдиреНрд╣реЗрдВ рд░реАрд╣рд╛рдЗрдбреНрд░реЗрдЯ рдХрд░рддрд╛ рд╣реИред рд╡реЗрдм рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП SSR рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдорд╛рдзрд╛рди рдкрд░ рдЕрднреА рднреА рдорд╛рдирдХ рд╕реНрддрд░ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рдЗрд╕ рднрд╛рдЧ рдкрд░ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

@effulgentsia рдореБрдЭреЗ рдпрд╣ рднреА рдкрд╕рдВрдж рд╣реИ рдХрд┐ рдЖрдк рдХрд╣рд╛рдБ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред @sophiebits , @gaearon do
рдЖрдк рд╕рднреА рдХреЗ рдкрд╛рд╕ рдЗрд╕ рджрд┐рд╢рд╛ рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ?

рдордВрдЧрд▓рд╡рд╛рд░, 31 рдЕрдХреНрдЯреВрдмрд░, 2017 рдХреЛ рд╢рд╛рдо 7:33 рдмрдЬреЗ рдЯреНрд░реЗ рд╢реБрдЧрд╛рд░реНрдЯ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

@effulgentsia https://github.com/effulgentsia рдореБрдЭреЗ рдкрд╕рдВрдж рд╣реИ рдЬрд╣рд╛рдВ рдЖрдкрдХрд╛
рд╡рд┐рдЪрд╛рд░ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рдирд╛рдореЛрдВ рдХреЛ рдереЛрдбрд╝рд╛ рд╕рд╛ рдмрд╛рдЗрдХрд╢реЗрдб рдХрд░рдирд╛, рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
рдЙрдирдХреЗ рдирд╛рдордХрд░рдг рдХреЛ рд╕рдВрд░реЗрдЦрд┐рдд рдХрд░реЗрдВ: domProps / domEvents, рдпрд╛ рдХреБрдЫ рдФрд░ред

рдбрдмреНрд▓реВрдЖрд░рдЯреА рд╡рд┐рдХрд▓реНрдк 2, рдпрд╣ рдХрдо рд╕реЗ рдХрдо рдкрд┐рдЫрдбрд╝рд╛ рд╕рдВрдЧрдд рд╣реИ рдФрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓реЛрдВ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ,
рд▓реЗрдХрд┐рди рдореИрдВ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдЖ рд░рд╣рд╛ рд╣реВрдБред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрд╕рдПрд╕рдЖрд░ рдХреЛ рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕реНрд╡рдпрдВ рддрдм рддрдХ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рддрдХ
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЙрди рдЧреБрдгреЛрдВ рдХрд╛ рд╕рдореНрдорд╛рди рдХрд░ рд╕рдХрддреА рд╣реИ рдЬреЛ рдШрдЯрдХ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ рдпрджрд┐ рдпрд╣ рд╣реИ
рдЙрдиреНрд╣реЗрдВ рдЯреНрд░реИрдХ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдПрдХ рд╕рд╛рд░ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ рдпрд╣ рдлрд┐рд░ рд╕реЗ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐
рд╕реБрд╡рд┐рдзрд╛:
https://gist.github.com/treshugart/6eff0da3c0bea886bb56589f743b78a6ред
рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдШрдЯрдХ рд╕рд░реНрд╡рд░ рдкрд░ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рдмрд╛рдж рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ
рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рд░реАрд╣рд╛рдЗрдбреНрд░реЗрдЯ рдХрд░рддрд╛ рд╣реИред рд╡реЗрдм рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП SSR рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди
рд╕рдорд╛рдзрд╛рди рдЕрднреА рднреА рдорд╛рдирдХ рд╕реНрддрд░ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
рдпрд╣рд╛рдВ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рдЗрд╕ рд╣рд┐рд╕реНрд╕реЗ рдкрд░ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИред

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/facebook/react/issues/11347#issuecomment-340960798 ,
рдпрд╛ рдереНрд░реЗрдб рдХреЛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/ABBFDeiQhBWNGXNplbVV1zluYxT-ntFvks5sx9hngaJpZM4QD3Zn
.

рдирд╛рдореЛрдВ рдХреЛ рдереЛрдбрд╝рд╛ рд╕рд╛ рдмрд╛рдЗрдХрд╢реЗрдб рдХрд░рдирд╛: рдбреЛрдордкреНрд░реЙрдкреНрд╕ / рдбреЛрдордЗрд╡реЗрдВрдЯреНрд╕ред

рдореИрдВ рдЙрди рд▓реЛрдЧреЛрдВ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВред рдореИрдВ рдЗрд╕ рдмрд╛рдд рдкрд░ рднреА рд╡рд┐рдЪрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ "рд░реЗрдл" рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рд╕рд╛рде "рдбреЛрдо" рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рдмрджрд▓рдХрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдФрд░ рднреА рдЕрдзрд┐рдХ рдореБрд╣рд╛рд╡рд░реЗрджрд╛рд░ рдмрдирд╛рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рддреЛ рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ: refProps / refEvents , рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдкреНрд░реЛрдк рдФрд░ рдИрд╡реЗрдВрдЯ рд╢реНрд░реЛрддрд╛рдУрдВ рдХреЛ "рд░реЗрдлрд░реА" рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИрдВред

рдФрд░ рдлрд┐рд░ рдореИрдВрдиреЗ рд╕реЛрдЪрд╛, рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ this.props рдЕрдВрджрд░ рдирдП рд╡рд┐рд╢реЗрд╖ рдирд╛рдореЛрдВ рдХреЛ рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдореМрдЬреВрджрд╛ ref JSX рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдЕрдзрд┐рднрд╛рд░рд┐рдд рдХрд░ рджреЗрдВред рд╡рд░реНрддрдорд╛рди рдореЗрдВ, "рд░реЗрдлрд░реА" рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬрд┐рд╕реЗ рд░рд┐рдПрдХреНрдЯ рдШрдЯрдХ рдорд╛рдЙрдВрдЯ рдФрд░ рдЕрдирдорд╛рдЙрдВрдЯ рд╣реЛрдиреЗ рдкрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдо рдЗрд╕реЗ рдПрдХ рд╡рд╕реНрддреБ рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдЕрдиреБрдорддрд┐ рджреЗрдВ:

<x-foo my-attr-1={}
  ref={{
    props: ...
    events: ...
    mounted: ...
    unmounted: ...
  }}
/>

рдПрдХ рд╡рд┐рдЪрд╛рд░ рд╣реИред

рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд╕рдВрдж рд╣реИ :)

рдЗрд╕ рдкрд░ рджреЛрд╕реНрддрд╛рдирд╛ рдкрд┐рдВрдЧред @gaearon @sophiebits рдХреНрдпрд╛ рдЖрдк @effulgentsia рдХреЗ рдирд╡реАрдирддрдо рдкреНрд░рд╕реНрддрд╛рд╡ рдкрд░ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░

рд╣рдордиреЗ рдЕрднреА рдПрдХ RFC рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЦреЛрд▓реА рд╣реИред рдХреНрдпрд╛ рд╣рдо рдЖрдк рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХреЛ рдЗрд╕реЗ RFC рдХреЗ рд░реВрдк рдореЗрдВ рдЬрдорд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ?
https://github.com/reactjs/rfcs

рдореИрдВ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп domProperties рдФрд░ eventListeners "props" (рдпрд╛ ref={{}} рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдмрд░рд╛рдмрд░) рдирд╣реАрдВ рдЬреЛрдбрд╝реВрдВрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд╣реБрдд рд╣реА рдЕрдкреНрд░рд╛рдХреГрддрд┐рдХ рдФрд░ рдЕрдиреНрдп рд╕рднреА рд░рд┐рдПрдХреНрдЯ рдШрдЯрдХреЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдШрдЯрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЧреБрдгреЛрдВ рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдЖрджрд┐ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХреЛ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдЗрд╕реЗ рдПрдХ ReactDOM.createCustomElementType- рд╢реИрд▓реА рд╕рдорд╛рдзрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ред рдлрд┐рд░ рдпрджрд┐ рдЖрдк рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдареАрдХ рдПрдХ рдмрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдПрдХ рддреБрд▓рдиреАрдп рдорд╛рддреНрд░рд╛ рдореЗрдВ рдХрд╛рдо рд╣реИ (рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдПрдХ рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛), рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдХрдИ рдмрд╛рд░ рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рд╣рд░ рдмрд╛рд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рд╣рд░ рдмрд╛рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЬрдм рддрдХ рдХрд┐ рдореБрдЭреЗ рдХреБрдЫ рдпрд╛рдж рдирд╣реАрдВ рдЖ рд░рд╣рд╛ рд╣реИ, рдПрдХ рд╕реНрд╡рдЪреНрдЫ рдХрд╕реНрдЯрдо рддрддреНрд╡ рдПрдХреАрдХрд░рдг рд╣реЛрдиреЗ рдХреЗ рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЛ рд╣рд░рд╛рдиреЗ рд▓рдЧрддрд╛ рд╣реИред

@sophiebits рдареАрдХ рд╣реИ, рдореИрдВ рдРрд╕рд╛ рдХреБрдЫ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд░рдПрдлрд╕реА рд▓рд┐рдЦрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддрд╛ рдерд╛ред рдЖрдк рдЙрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдиреЗ 26 рдЕрдХреНрдЯреВрдмрд░ рдХреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рдкрд░ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдерд╛ рдФрд░ рд▓реЛрдЧреЛрдВ рдХреЛ рдПрд╕рдПрд╕рдЖрд░ рдХреЗ рд▓рд┐рдП ReactDOM.createCustomElementType рд▓рд┐рдЦрдиреЗ рдХреА рдЗрдЬрд╛рдЬрдд рджреА рдереА рдФрд░/рдпрд╛ рдпрджрд┐ рд╡реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдореИрдкреНрд╕/рдЧреБрдгреЛрдВ рдкрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрдврд╝рд┐рдпрд╛ рдирд┐рдпрдВрддреНрд░рдг рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВ ?

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

@robdodson рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдмреЛрд░реНрдб рдкрд░ рд╣реВрдВред рдореИрдВ рд╡рд╛рджрд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдХрд┐ рдХреЛрдИ рдЕрдиреНрдп рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ рдЖрдПрдЧреА, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдВрддреБрд▓рди рд╣реИред

рд╡рд┐рдХрд▓реНрдк 3 рдЕрдм рддрдХ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИ, рдФрд░ рдпрд╣ SSR рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдореИрдВ рдЗрд╕рдХрд╛ рдПрдХ рд╡рд┐рдЪрд╛рд░ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХреИрд╕реЗред

рдЕрдм рддрдХ рд╕рднреА рд╡рд┐рдХрд▓реНрдк рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ, 3 рдХреЛ рдЫреЛрдбрд╝рдХрд░,

  • рдпрд╛ рддреЛ рд░рд┐рдПрдХреНрдЯ рд╕реНрд░реЛрдд рдХреЗ рдмрд╛рд╣рд░ рд╕рднреА рдХреЗ рд▓рд┐рдП рдЙрдЪреНрдЪ рд░рдЦрд░рдЦрд╛рд╡ рдмреЛрдЭ рдмрдирд╛рдПрдВ
  • рдпрд╛ рд╡реЗ рдкреВрд░реЗ рдмреНрд░рд╣реНрдорд╛рдВрдб рдореЗрдВ рд╕рднреА рдХрд╕реНрдЯрдо рддрддреНрд╡ рд▓реЗрдЦрдХреЛрдВ рдХреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд┐рдпрдореЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддреЗ рд╣реИрдВред

рдпрд╣рд╛рдБ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдирд┐рдпрдо рд╣реИрдВ рдЬрд┐рди рдкрд░ рд╣рдо рд╕рднреА рд╕рд╣рдордд рд╣реИрдВ:

  • setAttribute рд╕рд╛рде рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рд╕реЗрдЯ рдХрд░рдирд╛ рдмреНрд░рд╣реНрдорд╛рдВрдб рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреЛ рдбреЗрдЯрд╛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдорд╛рдирдХ рддрд░реАрдХрд╛ рд╣реИ рдЬреЛ рдШреЛрд╖рдгрд╛рддреНрдордХ HTML рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде 1-рд╕реЗ-1 рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред рдЗрд╕реЗ рдмреНрд░рд╣реНрдорд╛рдВрдб рдХреЗ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ 100% рд╕рдордп рдХрд╛рдо рдХрд░рдирд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рддрддреНрд╡реЛрдВ рдХреЛ рдбреЗрдЯрд╛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рдпрд╣ рдПрдХрдорд╛рддреНрд░ 100% рдЧрд╛рд░рдВрдЯреАрдХреГрдд рддрд░реАрдХрд╛ рд╣реИред
  • рдХреБрдЫ рд▓реЛрдЧ рдЦреБрд╢ рдирд╣реАрдВ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рддрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред
  • рдХреБрдЫ рддрддреНрд╡ (рдореИрдВ рджреЛрд╣рд░рд╛рддрд╛ рд╣реВрдВ, _only some element_ ), рдСрдмреНрдЬреЗрдХреНрдЯ рдЧреБрдгреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдорд╛рди рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдореИрдк рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ _not_ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ 100% рд╕рдордп рднрд░реЛрд╕рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
  • рдХреБрдЫ рд▓реЛрдЧ рд╡рд╕реНрддреБ рдЧреБрдгреЛрдВ рдХреЛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЧреИрд░-рддрд╛рд░ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

рддреЛ, рдХрдо рд╕реЗ рдХрдо, рдЕрдЧрд░ рд░рд┐рдПрдХреНрдЯ рдмреНрд░рд╣реНрдорд╛рдВрдб рдореЗрдВ _рд╣рд░ рдПрдХ рдХрд╕реНрдЯрдо рддрддреНрд╡ рдХреЗ рд╕рд╛рде 100% рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛

  • рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рдпрд╣ рдорд╣рд╕реВрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рднрдЧрд╡рд╛рди рдирд╣реАрдВ рд╣реИ, рдЕрдиреНрдп рдХрдИ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИрдВ рдЬрд┐рдирдХрд╛ рд▓реЛрдЧ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ,
  • рдЗрд╕рд▓рд┐рдП рд░рд┐рдПрдХреНрдЯ _by default_ рдХреЗрд╡рд▓ setAttribute рдорд╛рдзреНрдпрдо рд╕реЗ рдбреЗрдЯрд╛ рдкрд╛рд╕ рдХрд░реЗрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ 100% рдорд╛рдирдХ рд╣реИред
  • рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЗрд╕ рддрдереНрдп рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХрд╕реНрдЯрдо рддрддреНрд╡ рд▓реЗрдЦрдХ рдЕрдкрдиреА рдХрдХреНрд╖рд╛ рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ setAttribute рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░/рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ setAttribute рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рдкреНрд░рдореБрдЦ рдЙрджрд╛рд╣рд░рдг рдП-рдлреНрд░реЗрдо рдЬреИрд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
  • рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рдпрд╣ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрджрд┐ рдПрдХ рдХрд╕реНрдЯрдо рддрддреНрд╡ рд▓реЗрдЦрдХ рдЪрд╛рд╣рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдХрд╕реНрдЯрдо рддрддреНрд╡ рд╣рд░ рд╕рдВрднрд╡ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗ, _рди рдХреЗрд╡рд▓ React_ рдХреЗ рд╕рд╛рде , рддреЛ рд╡рд╣ рд▓реЗрдЦрдХ рдЕрдкрдиреЗ рддрддреНрд╡ рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╣рд░ рдЪреАрдЬ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП setAttribute рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░реЗрдЧрд╛, рдФрд░ рдпрджрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рднреА рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЧреБрдгреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИрдВ, рддреЛ рдкреВрд░рд╛ рдмреНрд░рд╣реНрдорд╛рдВрдб рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдЧрд╛ред _рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ ifs, ands, рдпрд╛ buts рдирд╣реАрдВ рд╣реИ!_ (рдЬрдм рддрдХ рдХрд┐ w3c/whatwg рдХреБрдЫ рдмрдбрд╝реЗ рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рдХрд░рддрд╛)

Sooooooooo , рдХрд╣рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рд╣рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП

  • https://github.com/facebook/react/issues/10070 рдареАрдХ
  • рдорд╣рд╕реВрд╕ рдХрд░реЗрдВ рдХрд┐ рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ рд╣рдо рдорд╛рдирдХреЛрдВ рдХреЗ рдФрд░ рдХрд░реАрдм рдкрд╣реБрдВрдЪ рдЬрд╛рддреЗ рд╣реИрдВ

рдлрд┐рд░, рд╣рдо рдХрднреА-рдХрднреА рдСрдмреНрдЬреЗрдХреНрдЯ-рдкреНрд░реЙрдкрд░реНрдЯреА рдПрдкреАрдЖрдИ рд╡рд╛рд▓реЗ рддрддреНрд╡реЛрдВ рдХреЗ рдкреНрд░рднрд╛рд╡реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВ:

  • рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдкрд╛рд╕ setAttribute рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИ, рдпрд╣ рдЬрд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдпрд╣ рд╣рд░ рд╕рдордп рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
  • рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХрднреА-рдХрднреА рдСрдмреНрдЬреЗрдХреНрдЯ рдЧреБрдгреЛрдВ рдХрд╛ рд▓рд╛рдн рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВред
  • рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рд╣рдореЗрд╢рд╛ рдпрд╣ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рддрддреНрд╡ (рдХрд╕реНрдЯрдо рдпрд╛ рдирд╣реАрдВ) рдХреЗ рд▓рд┐рдП рдСрдмреНрдЬреЗрдХреНрдЯ-рдкреНрд░реЙрдкрд░реНрдЯреА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореМрдЬреВрдж рд╣реИ рдпрд╛ рдирд╣реАрдВред
  • рдСрдмреНрдЬреЗрдХреНрдЯ-рдкреНрд░реЙрдкрд░реНрдЯреА рдЗрдВрдЯрд░рдлреЗрд╕ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ рдЬреЛ рдЖрд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде 1-рдЯреВ-1 рдореИрдк рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рддреЛ, рдЧреБрдгреЛрдВ рдмрдирд╛рдо рдЧреБрдгреЛрдВ рдХреЗ рдЗрд╕ рдЬреНрдЮрд╛рди рдХреЗ рд╕рд╛рде, рд░рд┐рдПрдХреНрдЯ рдореЗрдВ рдПрдХ рд╕рдорд╛рдзрд╛рди рдЬреЛ _рдмреНрд░рд╣реНрдорд╛рдВрдб рдХреЗ резрежреж% рдорд╛рдирдХ рдФрд░ рд╕рдореНрдорд╛рди рдХрд╛рдиреВрдиреЛрдВ рдХреЛ рдмрдврд╝рд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ_ рдЪрд╛рд╣рд┐рдП:

  1. рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ 100% рд╕рдордп рдХрд╛рдо рдХрд░рдиреЗ рджреЗрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ <x-foo blah="blah" /> рдХреЛ _рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ_ рдореИрдк рдХрд░рдХреЗ setAttribute рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдорд╛рди рдХреЛ _unchanged_ рдХреЗ рд╕рд╛рде рдкрд╛рд╕ рдХрд░рдирд╛ "[object Object]" рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░ рджреЗрдЧрд╛ред
  2. рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдЧрд░реВрдХ рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ рдСрдмреНрдЬреЗрдХреНрдЯ-рдкреНрд░реЙрдкрд░реНрдЯреА рдЗрдВрдЯрд░рдлреЗрд╕ рдореМрдЬреВрдж рд╣реИ рдФрд░ рдЙрди рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ _рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд░реЙрдкреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реАрдХреЗ рдХреЗ рд╕рд╛рде рдЖрдУред

рдпрд╣ рд╡рд┐рдХрд▓реНрдк 3 рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ, рдПрдХ рд╕рддрд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ (рдЬреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рд╕реАрдЦрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ), рдПрдХ рдРрд╕рд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ рдЬреЛ рдЖрджрд░реНрд╢ рдХреЗ рд╕рдмрд╕реЗ рдХрд░реАрдм рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ SO рдкреНрд░рд╢реНрди рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдХреЗрд╡рд▓ рдЙрдкрд▓рдмреНрдз рдкреНрд░рддреАрдХ = , рд╣рд╛рд▓рд╛рдВрдХрд┐ & (рдПрдХ рдмрдЪрдиреЗ рдпреЛрдЧреНрдп рд░реВрдк рдХреЗ рд╕рд╛рде, рд╢рд╛рдпрдж \& ) рдкрд░ рдмрд╕рдирд╛ рдЕрдзрд┐рдХ рдкрдардиреАрдп рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдореБрдЭреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдПрдХ рдкреНрд░реЛрдк рдЪрд╛рд╣рд┐рдП:

<x-foo &blah="blah" />

WHATWG HTML рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕реНрдкреЗрдХ рджреНрд╡рд╛рд░рд╛ рдХрд╡рд░ рдХрд┐рдП рдЧрдП рдЕрдзрд┐рдХрд╛рдВрд╢ рдЕрдиреНрдп рдкрд╛рддреНрд░реЛрдВ рдХреЛ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рд╡реЗ рдХрд░рддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдФрд░ рд╡рд┐рд╖рдп рд╣реИред

рд╡рд┐рдХрд▓реНрдк 3 рдЕрдм рддрдХ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИред

рдпрджрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рд╣рд╛рдЗрдбреНрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рдПрд╕рдПрд╕рдЖрд░ рдореЗрдВ рдкреНрд░реЙрдкреНрд╕ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ, рддреЛ, рдУрд╣ рдареАрдХ рд╣реИред рдЗрд╕рдиреЗ рдкрд╣рд▓реЗ рдХрднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛, рдФрд░ рдЗрд╕реЗ рдЕрдм рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред PHP-рд╢реИрд▓реА рдпрд╛ рдЬрд╛рд╡рд╛-рд╢реИрд▓реА SSR рдмрд┐рдирд╛ рд╣рд╛рдЗрдбреНрд░реЗрд╢рди рдХреЗ рд╕реНрдерд┐рд░ HTML рднреЗрдЬрддрд╛ рд╣реИ рдФрд░ рд╡реЗ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдкрд░ 100% рднрд░реЛрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рддрд╛ рд╣реИ, рдЕрдЧрд░ рд╣рдо рд░рд┐рдПрдХреНрдЯ рдПрд╕рдПрд╕рдЖрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рд╢рд╛рдпрдж рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рд╣рд╛рдЗрдбреНрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдпрджрд┐ рд╣рдо рд╣рд╛рдЗрдбреНрд░реЗрд╢рди рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдмрд╕ рдЗрд╕ рддрдереНрдп рд╕реЗ рдЕрд╡рдЧрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╣рдореЗрдВ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдкреНрд░реЛрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред _рдпрд╣ рд╕рд░рд▓ рд╣реИред рдХреЗрд╡рд▓ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рдЗрд╕ рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рд╣реИред_

рдкрд░рдВрддреБ!!! рд╡рд╣ рд╕рдм рдХреБрдЫ рдирд╣реАрдВ рд╣реИрдВ! рд▓реЛрдЧреЛрдВ рдХреЛ рдЕрдзрд┐рдХ рдирд┐рдпрдВрддреНрд░рдг рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдЕрднреА рднреА рд╡рд┐рдХрд▓реНрдк 5 рдХреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд┐рдХрд▓реНрдк 5 рдЬреИрд╕реЗ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде,

  • рдХреБрдЫ рд▓реЛрдЧ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреИрд╕реЗ рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдкреНрд░реЙрдкреНрд╕ рдореЗрдВ рдореИрдк рдХрд░ рд╕рдХрддреА рд╣реИрдВ
  • рдФрд░ рдХреИрд╕реЗ рдХреБрдЫ рдкреНрд░реЙрдкреНрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдореИрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд▓реЛрдЧреЛрдВ рдХреЛ SSR рдХреЛ рдЧреИрд░-рд╣рд╛рдЗрдбреНрд░реЗрдЯрд┐рдВрдЧ рдкреНрд░рдХрд╛рд░ рдХреЗ SSR рдХреЗ рд▓рд┐рдП рднреА рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ!
  • рд╣рдо рд▓реЛрдЧреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ "рдпрджрд┐ рдпрд╣ рд╡рд┐рд╢реЗрд╖рддрд╛ рд▓рд┐рдЦреА рдЧрдИ рд╣реИ, рддреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рдЗрд╕ рдкреНрд░реЛрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдпрд╣ рдПрд╕рдПрд╕рдЖрд░ рд╣реИ, рддреЛ рдЗрд╕реЗ рдкреНрд░реЛрдк рдХреЛ рдкрд╛рд╕ рди рдХрд░реЗрдВ", рдпрд╛ "рдЗрд╕ рдкреНрд░реЛрдк рдХреЛ рдХреЗрд╡рд▓ рдПрд╕рдПрд╕рдЖрд░ рдХреЗ рджреМрд░рд╛рди рдЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдкрд╛рд╕ рдХрд░реЗрдВ, рдЕрдиреНрдпрдерд╛ рдХреНрдпрд╛ рдХрд░реЗрдВ рдореИрдВрдиреЗ рд╕рд┐рдЧрд┐рд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛", рдЖрджрд┐

рдЕрдВрдд рдореЗрдВ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдПрдХ рд╕рдорд╛рдзрд╛рди рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ рдЬреЛ рдХрд╛рдо рдХрд░реЗрдЧрд╛:

  • рд╡рд┐рдХрд▓реНрдк 3 setAttribute рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдкрд░реНрджреЗ рдХреЗ рдкреАрдЫреЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ,
  • #10070 рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рддрд╛рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд▓реЛрдЧреЛрдВ рдХреЗ рд░рд╛рд╕реНрддреЗ рдореЗрдВ рди рдЖрдП,
  • рдФрд░ рдПрд╕рдПрд╕рдЖрд░, рдХреНрд▓рд╛рдЗрдВрдЯ, рдпрд╛ рджреЛрдиреЛрдВ рдХреЛ рдЯреНрдпреВрди рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рд╕рд╣рд┐рдд, рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдЯреНрдпреВрдирд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдк 5 рдХреА рддрд░рд╣ рдПрдХ рдПрдкреАрдЖрдИ, рдЬрд┐рдиреНрд╣реЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдирд╡рд╡рд░реНрд╖ рдХреА рд╢реБрднрдХрд╛рдордирд╛рдПрдВ!

рдореИрдВ рдЙрдкрд░реЛрдХреНрдд рдХреБрдЫ рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдбрд░ рд╣реИ рдХрд┐ рдпрд╣ рдзрд╛рдЧрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА _рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ_ рд▓рдВрдмрд╛ рд╣реИред рддреЛ, рдЗрд╕реЗ рд▓рдВрдмрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ: рдкреА

рдпрд╣рд╛рдБ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдирд┐рдпрдо рд╣реИрдВ рдЬрд┐рди рдкрд░ рд╣рдо рд╕рднреА рд╕рд╣рдордд рд╣реИрдВ:

рд╕реЗрдЯ рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯ рдХреЗ рд╕рд╛рде рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рд╕реЗрдЯ рдХрд░рдирд╛ рдмреНрд░рд╣реНрдорд╛рдВрдб рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреЛ рдбреЗрдЯрд╛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдорд╛рдирдХ рддрд░реАрдХрд╛ рд╣реИ рдЬреЛ рдШреЛрд╖рдгрд╛рддреНрдордХ HTML рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде 1-рд╕реЗ-1 рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред рдЗрд╕реЗ рдмреНрд░рд╣реНрдорд╛рдВрдб рдХреЗ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ 100% рд╕рдордп рдХрд╛рдо рдХрд░рдирд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рддрддреНрд╡реЛрдВ рдХреЛ рдбреЗрдЯрд╛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рдпрд╣ рдПрдХрдорд╛рддреНрд░ 100% рдЧрд╛рд░рдВрдЯреАрдХреГрдд рддрд░реАрдХрд╛ рд╣реИред

рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕рдЪ рдирд╣реАрдВ рд╣реИред рдпрд╣ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ рдХрд┐ рдПрдХ рдХрд╕реНрдЯрдо рддрддреНрд╡ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддрд╛ рд╣реИред рдЖрдк рдЙрддрдиреА рд╣реА рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХреЗрд╡рд▓ JS рдЧреБрдгреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рддреЛ рдпрд╣ "рдбреЗрдЯрд╛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рдЧрд╛рд░рдВрдЯреАрдХреГрдд рддрд░реАрдХрд╛" рдирд╣реАрдВ рд╣реИред рдкреНрд░рд╡рд░реНрддрди рддрдВрддреНрд░ рдХреА рдХрдореА рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдк 100% рдирд┐рд╢реНрдЪрд┐рддрддрд╛ рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рднреА рд╢реИрд▓реА (HTML рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдпрд╛ JS рдЧреБрдг) рдкрд░ рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред

рдХреБрдЫ рд▓реЛрдЧ рдЦреБрд╢ рдирд╣реАрдВ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рддрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдХреБрдЫ рддрддреНрд╡ (рдореИрдВ рджреЛрд╣рд░рд╛рддрд╛ рд╣реВрдВ, рдХреЗрд╡рд▓ рдХреБрдЫ рддрддреНрд╡), рдСрдмреНрдЬреЗрдХреНрдЯ рдЧреБрдгреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдорд╛рди рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдореИрдк рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдРрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕ рдкрд░ 100% рд╕рдордп рдкрд░ рднрд░реЛрд╕рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

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

рдХреБрдЫ рд▓реЛрдЧ рд╡рд╕реНрддреБ рдЧреБрдгреЛрдВ рдХреЛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЧреИрд░-рддрд╛рд░ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

рдЗрд╕рд▓рд┐рдП рд░рд┐рдПрдХреНрдЯ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЪрд┐рд▓реНрд▓рд╛рддрд╛ рд╣реИ рдмрд╕ рдбреЗрдЯрд╛ рдХреЛ рд╕реЗрдЯ рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рд╕ рдХрд░реЗрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ 100% рдорд╛рдирдХ рд╣реИред

рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЧреБрдг рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдорд╛рдирдХ рд╣реИрдВред рдЕрдзрд┐рдХрд╛рдВрд╢ HTML рддрддреНрд╡ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рдЧреБрдг рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рджреЛрдиреЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, <img src=""> рдпрд╛ HTMLImageElement.src ред

рд░рд┐рдПрдХреНрдЯ рдХреЛ рдЗрд╕ рддрдереНрдп рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХрд╕реНрдЯрдо рдПрд▓рд┐рдореЗрдВрдЯ рд▓реЗрдЦрдХ рдЕрдкрдиреА рд╡рд░реНрдЧ рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд╕реЗрдЯрдПрдЯреНрд░рд┐рдмреНрдпреВрдЯ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдмрдврд╝рд╛ / рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рд╕реЗрдЯрдПрдЯреНрд░рд┐рдмреНрдпреВрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред

рд▓реЗрдЦрдХ рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рдереЗ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬреЗрдПрд╕ рдЧреБрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ "рдЧреИрд░-рдорд╛рдирдХ" рд▓рдЧрддрд╛ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рддрддреНрд╡ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдФрд░ рдХреНрд▓реЛрди рдХрд░рдиреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдЕрдЬреАрдм рдореБрджреНрджреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рдмрддрд╛ рд╕рдХрддрд╛ рд╣реИред

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рдпрд╣ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрджрд┐ рдХреЛрдИ рдХрд╕реНрдЯрдо рддрддреНрд╡ рд▓реЗрдЦрдХ рдЪрд╛рд╣рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдХрд╕реНрдЯрдо рддрддреНрд╡ рд╣рд░ рд╕рдВрднрд╡ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗ, рди рдХрд┐ рдХреЗрд╡рд▓ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рде, рддреЛ рд╡рд╣ рд▓реЗрдЦрдХ рдЕрдкрдиреЗ рддрддреНрд╡ рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╣рд░ рдЪреАрдЬ рдХреЗ рдЕрдиреБрдХреВрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯрдПрдЯреНрд░рд┐рдмреНрдпреВрдЯ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░реЗрдЧрд╛, рдФрд░ рдпрджрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рднреА рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ , рддреЛ рдкреВрд░рд╛ рдмреНрд░рд╣реНрдорд╛рдВрдб рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдЕрдЧрд░, рдФрд░, рдпрд╛ рд▓реЗрдХрд┐рди рдирд╣реАрдВ рд╣реИ! (рдЬрдм рддрдХ w3c/whatwg рдХреБрдЫ рдмрдбрд╝реЗ рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рдХрд░рддрд╛)

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

рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ 100% рд╕рдордп рдХрд╛рдо рдХрд░рдиреЗ рджреЗрдВред рдЗрд╕ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рдирдЪрд┐рддреНрд░ рджреНрд╡рд╛рд░рд╛ рд╕реЗрдЯ рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯ рдФрд░ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХреЗ рд╕рд╛рде рдорд╛рди рдкрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдПрдХ рдЕрдЯреВрдЯ рдкрд░рд┐рд╡рд░реНрддрди рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдПрдХ рдлрд┐рдХреНрд╕рд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рд╣реИ рдЬреЛ рдЕрдиреНрдпрдерд╛ рдЕрд░реНрдерд╣реАрди "[рдСрдмреНрдЬреЗрдХреНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ]" рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░ рджреЗрдЧрд╛ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ _is_ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рдорд╛рди рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░ рд░рд╣реА рд╣реИред рдХреЙрд▓рд┐рдВрдЧ setAttribute('foo', {some: object}) рдореЗрдВ рдкрд░рд┐рдгрд╛рдо [object Object] ред рдЬрдм рддрдХ рдЖрдк рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рд╡рд╕реНрддреБ рдкрд░ JSON.stringify() ? рд▓реЗрдХрд┐рди рддрдм рд╡рд╣ рд╡рд╕реНрддреБ "рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд" рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╢рд╛рдпрдж рдЖрдк setAttribute() рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЗрдЦрдХ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ? рдбреАрдУрдПрдо рдХреЛ рдмрдВрджрд░-рдкреИрдЪ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЙрдиреНрд╣реЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдЬреЗрдПрд╕ рдЧреБрдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рдирд╛ рдЕрдзрд┐рдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ _is_ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рдорд╛рди рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░ рд░рд╣реА рд╣реИред рдХреЙрд▓рд┐рдВрдЧ setAttribute('foo', {some: object}) рдореЗрдВ рдкрд░рд┐рдгрд╛рдо [object Object]

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ setAttribute рдореЗрдВ рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдореВрд▓реНрдпреЛрдВ рдХреЛ рдордЬрдмреВрд░ рдХрд░ рд░рд╣реА рд╣реИ:

https://github.com/facebook/react/blob/4d6540893809cbecb5d7490a77ec7ad32e2aeeb3/packages/react-dom/src/client/DOMPropertyOperations.js#L136

рддрдерд╛

https://github.com/facebook/react/blob/4d6540893809cbecb5d7490a77ec7ad32e2aeeb3/packages/react-dom/src/client/DOMPropertyOperations.js#L166

рдореИрдВ рдореВрд▓ рд░реВрдк рд╕реЗ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдХрд╣реА рдЧрдИ рд╕рднреА рдмрд╛рддреЛрдВ рд╕реЗ рд╕рд╣рдордд рд╣реВрдВред

рд╣рдо рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рд╣рдордд рд╣реИрдВ рдХрд┐ рд▓реЛрдЧ рдЪреАрдЬреЛрдВ рдХреЛ рджреЛрдиреЛрдВ рддрд░рд╣ рд╕реЗ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдРрд╕рд╛ рдХреЛрдИ рдорд╛рдирдХ рдирд╣реАрдВ рд╣реИ рдЬреЛ рд╣рд░ рдХрд┐рд╕реА рдХреЛ рдЗрд╕реЗ рд╕рд┐рд░реНрдл рдПрдХ рдпрд╛ рджреВрд╕рд░реЗ рддрд░реАрдХреЗ рд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЕрднреА рднреА рд▓рдЧрддрд╛ рд╣реИ

  • рд╡рд┐рдХрд▓реНрдк 3 setAttribute рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдЧреБрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рддрд░реНрдХ,
  • # резрежрежренреж рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рддрд╛рдХрд┐ рд░рд┐рдПрдХреНрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд▓рд┐рдП рдЬрд╝рдмрд░рджрд╕реНрддреА рди рдХрд░реЗ,
  • рдФрд░ рд╡рд┐рдХрд▓реНрдк 5, рдареАрдХ рдЯреНрдпреВрдирд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдкреАрдЖрдИ

рдпрджрд┐ рд╡рд┐рдХрд▓реНрдк 5 рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдПрд╕рдПрд╕рдЖрд░ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╣рд╛рдЗрдбреНрд░реЗрд╢рди рдбреЗрдЯрд╛ рдХреЛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдпрд╛ рдкреНрд░реЙрдкреНрд╕ рдореЗрдВ рдореИрдк рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рд╡рд┐рдХрд▓реНрдк 5 рдПрдкреАрдЖрдИ рдХреЗ рдЙрдкрдпреЛрдЧ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ setAttribute рдореЗрдВ рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдореВрд▓реНрдпреЛрдВ рдХреЛ рдордЬрдмреВрд░ рдХрд░ рд░рд╣реА рд╣реИ

рдЕрдЪреНрдЫрд╛ рдРрд╕рд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓реЛрдЧ рдПрдХ рдХрд╕реНрдЯрдо toString() рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ [object Object] ред

рдЪреВрдВрдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓реЛрдЧ рдПрдХ рдХрд╕реНрдЯрдо toString() рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ [object Object] ред

рдареАрдХ рд╡реИрд╕реЗ рд╣реА рдЕрдЧрд░ рдореИрдВ рдХрд░рддрд╛ рд╣реВрдБ

const div = document.createElement('div')
div.setAttribute('foo', {a:1, b:2, c:3})

рдкрд░рд┐рдгрд╛рдо рд╣реИ

<div foo="[object Object]"></div>

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

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рдпрд╣ рдорд╣рд╕реВрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рднрдЧрд╡рд╛рди рдирд╣реАрдВ рд╣реИ, рдЕрдиреНрдп рдХрдИ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рд▓реЛрдЧ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд░рддреЗ рд╣реИрдВ

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

@sebmarkbage рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореЗрд░рд╛ рдорддрд▓рдм рдмрд┐рд▓реНрдХреБрд▓ рднреА

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

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

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

рдлрд┐рд░ рд╕реЗ, рд╡рд╣рд╛рдБ рдореЗрд░реЗ рд╢рдмреНрджреЛрдВ рдХреЗ рдЪрдпрди рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИред рдореИрдВ рдЕрдЧрд▓реА рдмрд╛рд░ рдЗрд╕реЗ рджреЛрдмрд╛рд░рд╛ рд╕реЛрдЪреВрдВрдЧрд╛ред

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

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

рдЗрд╕ рдЖрд░рдПрдлрд╕реА рдкрд░ рдХреЛрдИ рдЕрдкрдбреЗрдЯ?

рдХрд╕реНрдЯрдо рдПрд▓рд┐рдореЗрдВрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫреА рд╣реЛ рд░рд╣реА рд╣реИрдВ рдФрд░ рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреЗ рд░рд┐рдПрдХреНрдЯ рдРрдк рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ред рдЗрд╕ рдкрд░ рдЕрднреА рддрдХ рдХреЛрдИ рдЦрдмрд░? рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреЛ рд▓рдкреЗрдЯрдирд╛ рдФрд░ рдмрд╛рдж рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдлрд┐рд░ рд╕реЗ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдирдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд░рдирд╛ рдПрдХ рдмрд╣реБрдд рд╣реА рдЕрд╕рд╛рдзреНрдп рд╕рдорд╛рдзрд╛рди рд╣реИ, рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ Vue рдФрд░ Angular рдореВрд▓ рд░реВрдк рд╕реЗ рдШрдЯрдХреЛрдВ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдВрднрд╛рд▓ рд░рд╣реЗ рд╣реИрдВ

рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХреЛрдИ рдЕрдкрдбреЗрдЯ?

рдореИрдВ рднреА рд╣реИрдХреНрд╕ рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓рд┐рдП рдмрд┐рдирд╛ рдХрд╕реНрдЯрдо рдПрд▓рд┐рдореЗрдВрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ред рдореИрдВ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реЛ рдЬрд╛рдПред

@mgolub2 рд░рд┐рдПрдХреНрдЯ рдЯреАрдо рдЗрд╕ рдмрд╛рдд рдХреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддреА рдХрд┐ рд╡реЗрдм рд╕рдореБрджрд╛рдп рдХреНрдпрд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред рд╡реЗрдм рдШрдЯрдХ рдЕрдм рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рд╕рдорд░реНрдерд┐рдд рдорд╛рдирдХ рд╣реИрдВ, рдФрд░ 2 рд╡рд░реНрд╖реЛрдВ рдХреЗ рдмрд╛рдж рдЗрд╕ рдорд╛рдирдХ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреАрдо рдХреА рдУрд░ рд╕реЗ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрдХреЗрдд рдирд╣реАрдВ рд╣реИрдВред

рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░, рдореИрдВрдиреЗ рджреЛ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдмрджрд▓рдХрд░ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рд╢реБрд░реВ рдХрд┐рдпрд╛: https://github.com/facebook/react/pull/16899

рдпрд╣ рдПрдХ рдХрд╕реНрдЯрдо рддрддреНрд╡ рд▓реЗрдЦрдХ рдХреЛ рдирд┐рдореНрди рдХреА рддрд░рд╣ рдХреБрдЫ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:

class MyElement extends HTMLElement {
  setAttribute(name, value) {
    // default to existing behavior with strings
    if (typeof value === 'string')
      return super.setAttribute(name, value)

    // but now a custom element author can decide what to do with non-string values.
    if (value instanceof SomeCoolObject) { /*...*/ }
  }
}

рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд setAttribute рд╡рд┐рдзрд┐ рдХреИрд╕реА рджрд┐рдЦ рд╕рдХрддреА рд╣реИ, рдЗрд╕ рдкрд░ рдХрдИ рднрд┐рдиреНрдирддрд╛рдПрдВ рд╣реИрдВ, рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИред

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЯреАрдо, рдЖрдк рддрд░реНрдХ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрд╕реНрдЯрдо рддрддреНрд╡ рд▓реЗрдЦрдХреЛрдВ рдХреЛ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдбреЛрдо рдХреА рдореВрд▓ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ (рдлреА рдЬрдм рдорд╛рди рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ)ред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдпрд╣ рд░рд╛рдп рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЗрд╕ рдмрд╛рдд рдореЗрдВ рдмрд╛рдзрд╛ рдбрд╛рд▓рдиреА рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХрд╕реНрдЯрдо рддрддреНрд╡ рд▓реЗрдЦрдХ рдЕрдкрдиреЗ __ рдХрд╕реНрдЯрдо __ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдореМрдЬреВрджрд╛ рдбреЛрдо рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕ рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдбреЛрдо рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг рд╣реИ, рдФрд░ рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╣рдо рдбреАрдУрдПрдо рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреЗрд╡рд▓ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдбреЗрдЯрд╛ рдбреАрдУрдПрдо рдореЗрдВ рдкреНрд░рд╡рд╛рд╣рд┐рдд рд╣реЛрддрд╛ рд╣реИред "рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдбреЗрдЯрд╛ рдбреАрдУрдПрдо рдореЗрдВ рдмрд╣рддрд╛ рд╣реИ" рд╕реЗ рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рдХреЛ рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд┐рдирд╛ рдбреЗрдЯрд╛ рд╡рд╣рд╛рдВ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рд░реНрдЧ рд▓реЗрддрд╛ рд╣реИ (рд▓реЗрдЦрдХ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рддрд╛рд░реЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛ рд▓реЗрдЦрдХ рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рдмрджрд▓ рд░рд╣рд╛ рд╣реИ)ред

рдЖрдк рд▓реЗрдЦрдХ рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рдХреНрдпреЛрдВ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдЖрдк рдпрд╣ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЬреЛ рд╡реНрдпрдХреНрддрд┐ рдбреАрдУрдПрдо рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рд╡рд╣ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдбреАрдУрдПрдо рдХреЛ рдХреМрди рд╕рд╛ рдбреЗрдЯрд╛ рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реИ?

@trusktr рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдкрд░ https://github.com/facebook/react/issues/10070 рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рдереА

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╕реНрдЯрдо рддрддреНрд╡ рд▓реЗрдЦрдХреЛрдВ рдХреЛ setAttribute рдЬреИрд╕реА рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╡рд┐рдзрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рдиреЗ рдХреЗ рдЦрд┐рд▓рд╛рдл рд▓реЛрдЧреЛрдВ рдХреЛ рд╕рд╛рд╡рдзрд╛рди рдХрд░рддрд╛ рд╣реВрдВред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдордВрдХреА рдкреИрдЪ рдХрд░рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рд╣реИред cc @gaearon

рдЗрд╕ рддрд░рд╣ рдХреЗ рдЙрдкрд╡рд░реНрдЧреЛрдВ рдореЗрдВ setAttribute рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рд╣рд╛рдирд┐рд░рд╣рд┐рдд рд╣реИ (рдпрд╣ рдмрдВрджрд░ рдкреИрдЪрд┐рдВрдЧ рдирд╣реАрдВ рд╣реИ)ред рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рд░рд┐рдПрдХреНрдЯ рдХреЛ рдЙрд╕ рдкрд░ рдирд┐рд░реНрджреЗрд╢ рдХреНрдпреЛрдВ рджреЗрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рдЕрдЧрд░ рдпрд╣ рдЬрд░реВрд░реА рдирд╣реАрдВ рдХрд┐ рд░рд┐рдПрдХреНрдЯ рд▓рд┐рдм рдХрд╛ рдХрд╛рдо рд╣реЛред рд╣рдо DOM (рдмрд┐рдирд╛ рдмрд╛рдзрд╛ рдХреЗ) рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд┐рдПрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдЕрдЧрд░ рдореБрдЭреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ el.setAttribute() рдХрд░рдирд╛ рд╣реИ, рддреЛ рдпрд╣ рднреА рджреЗрд╡ рдЕрдиреБрднрд╡ рдХреЛ рдФрд░ рдЦрд░рд╛рдм рдХрд░ рджреЗрддрд╛ рд╣реИред

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд░рд┐рдПрдХреНрдЯ рдЯреАрдо setAttribute рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдХреЗ рдХрдИ рд▓реЛрдЧреЛрдВ рдХреЛ рдХрд┐рд╕реА рдмрдбрд╝реЗ рдЬреЛрдЦрд┐рдо рд╕реЗ рдмрдЪрд╛ рд░рд╣реА рд╣реИред

рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдПрдХ рдФрд░ рд╕рдорд╛рдзрд╛рди рдмреЗрд╣рддрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреБрдЫ рдирдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд▓рд┐рдП JSX рд╕реНрдкреЗрдХ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рд▓рдВрдмрд╛ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИред

рдпрджрд┐ рд╣рдо рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рд░реВрдкрд╛рдВрддрд░рдг рдХреЛ рд╣рдЯрд╛ рджреЗрддреЗ рд╣реИрдВ рддреЛ рд╕рдореБрджрд╛рдп рдХреНрдпрд╛ рдЦреЛ рджреЗрддрд╛ рд╣реИ? рд░рд┐рдПрдХреНрдЯ рдЯреАрдо рдХреНрдпрд╛ рдЦреЛрддреА рд╣реИ?

рд░рд┐рдПрдХреНрдЯ рдЯреАрдо рдмреЗрд╣рддрд░ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдмрд╛рдж рдореЗрдВ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░ рд╕рдХрддреА рд╣реИ...

рдХреНрдпреЛрдВ рди рдХрдо рд╕реЗ рдХрдо рд╣рдореЗрдВ рдХреЗрд╡рд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧрд┐рдлрд┐рдХреЗрд╢рди рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рджрд┐рдпрд╛ рдЬрд╛рдП? рдХреНрдпрд╛ рдРрд╕рд╛ рдХреБрдЫ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдЖрдк рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЛ рддреИрдпрд╛рд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ?

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╕реНрдЯрдо рддрддреНрд╡ рд▓реЗрдЦрдХреЛрдВ рдХреЛ setAttribute рдЬреИрд╕реА рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╡рд┐рдзрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рдиреЗ рдХреЗ рдЦрд┐рд▓рд╛рдл рд▓реЛрдЧреЛрдВ рдХреЛ рд╕рд╛рд╡рдзрд╛рди рдХрд░рддрд╛ рд╣реВрдВред

рдХреНрдпрд╛ рдЖрдк рдЗрд╕рдХрд╛ рдХреЛрдИ рдЕрдЪреНрдЫрд╛ рдХрд╛рд░рдг рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реИ?

рдпрд╣ рдПрдХ рд▓рд╛рд▓ рд╣реЗрд░рд┐рдВрдЧ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред "рдЕрдкрдиреЗ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рдзрд┐ рд╕рдВрд▓рдЧреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдХреЛ рд╕рдордЭрд╛рдПрдВ" рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ, рдЬреЛ рдХрд┐ рдбреАрдУрдПрдо рддрддреНрд╡реЛрдВ рдкрд░ рдЧреБрдгреЛрдВ рдХреЛ рдХреИрд╕реЗ рд╕реЗрдЯ рдХрд░реЗрдВ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред

@trusktr

рдХреНрдпрд╛ рдЖрдк рдЗрд╕рдХрд╛ рдХреЛрдИ рдЕрдЪреНрдЫрд╛ рдХрд╛рд░рдг рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реИ?

рд╡реЗрдм рдШрдЯрдХ рдПрдХ рдорд╛рдирдХ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдорд╛рдирдХ рдХреЗ рд╡реНрдпреБрддреНрдкрдиреНрди рдорд╛рдирдХ-рдЕрдиреБрдкрд╛рд▓рди рднреА рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред

рд╣рд╛рд▓рд╛рдВрдХрд┐, setAttribute рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рдЗрд╕ рд╢рд░реНрдд рдХреЗ рдЕрдиреБрдХреВрд▓ рдирд╣реАрдВ рд╣реИ: рдпрд╣ рдХреЗрд╡рд▓ рд░рд┐рдПрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реИрдХ рдмрдирд╛рддрд╛ рд╣реИ рдЬрдмрдХрд┐ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЕрдиреНрдп рдлреНрд░реЗрдорд╡рд░реНрдХ рд╣реИрдВ рдЬреЛ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рд╡реЗрдм рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдЬрдм рд╡реЗ рд░рд┐рдПрдХреНрдЯ рдХреЗ рд╕рд╛рде рдмрд┐рд▓реНрдХреБрд▓ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддрдм рднреА рдЙрдиреНрд╣реЗрдВ рд░рд┐рдПрдХреНрдЯ рд╣реИрдХ рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рд╕рд╣реА рд╕рдорд╛рдзрд╛рди рд╣реИред

рдЗрд╕рдХреЗ рдмрд╛рдж, рдпрд╣ рд╕рд░реНрд╡рд╡рд┐рджрд┐рдд рд╣реИ рдХрд┐ рдорд╛рдирдХ рддрд░реАрдХреЛрдВ рдХреЛ рдкреИрдЪ рдХрд░рдирд╛ рдПрдХ рдЧрд▓рдд рддрд░реАрдХрд╛ рд╣реИред setAttribute рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рд╕реЗ рдореВрд▓ рд╡реНрдпрд╡рд╣рд╛рд░ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЕрдВрддрд┐рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рднреНрд░рдорд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рд╡реЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рд╣рд░ рдХреЛрдИ рдорд╛рдирдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдХрд╕реНрдЯрдо рддрддреНрд╡ рдХреЛрдИ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ HTMLElement рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░рддрд╛ рд╣реИред рдФрд░ рдЬрдмрдХрд┐ рдпрд╣ рд░рд┐рдПрдХреНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рдЕрдиреНрдп рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЬрд╛рд▓ рдмрдирд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рд╡реЗрдм рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдврд╛рдВрдЪреЗ рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ setAttribute рдХреЛ рдмрд╣реБрдд рдХреБрдЫ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдХрд╕реНрдЯрдо рддрддреНрд╡ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдкреИрд░ рдХреЛ рд╢реВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣рдордд рд╣реЛрдВрдЧреЗред

рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рд░рд┐рдПрдХреНрдЯ рд░реИрдкрд░ рдЕрдзрд┐рдХ рдЖрд╢рд╛рдЬрдирдХ рд▓рдЧрддрд╛ рд╣реИред

рд╣реЗ рджреЛрд╕реНрддреЛрдВ, рдЗрд╕ рдмреАрдЪ рдЬрдм рд╣рдо рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ, рдореИрдВрдиреЗ рд░рд┐рдПрдХреНрдЯ рдореЗрдВ рдЖрдкрдХреЗ рд╡реЗрдм рдШрдЯрдХ рдХреЛ рд▓рдкреЗрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢рд┐рдо рдмрдирд╛рдпрд╛ рд╣реИ https://www.npmjs.com/package/reactify-wc

import React from "react";
import reactifyWc from "reactify-wc";

// Import your web component. This one defines a tag called 'vaadin-button'
import "@vaadin/vaadin-button";

const onClick = () => console.log('hello world');

const VaadinButton = reactifyWc("vaadin-button");

export const MyReactComponent = () => (
  <>
    <h1>Hello world</h1>
    <VaadinButton onClick={onClick}>
      Click me!
    </VaadinButton>
  </>
)

рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдорджрджрдЧрд╛рд░ рд╕рд╛рдмрд┐рдд рд╣реЛрдЧрд╛

(рдпрд╣ рдУрдПрд╕рдПрд╕ рдореЗрдВ рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рдкреНрд░рд╡реЗрд╢ рд╣реИ, рдФрд░ рдореЗрд░реЗ рдХрд╛рд░реНрдпрд╛рд▓рдп рд╕реЗ рдмрд╛рд╣рд░ рдХрд┐рд╕реА рдЪреАрдЬ рдХреА рдкрд╣рд▓реА рдУрдкрди рд╕реЛрд░реНрд╕рд┐рдВрдЧ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рд░рдЪрдирд╛рддреНрдордХ рдЖрд▓реЛрдЪрдирд╛ рд╕реНрд╡рд╛рдЧрдд рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ ЁЯШД)

рд╣реЗ рджреЛрд╕реНрддреЛрдВ, рдЗрд╕ рдмреАрдЪ рдЬрдм рд╣рдо рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ, рдореИрдВрдиреЗ рд░рд┐рдПрдХреНрдЯ рдореЗрдВ рдЖрдкрдХреЗ рд╡реЗрдм рдШрдЯрдХ рдХреЛ рд▓рдкреЗрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢рд┐рдо рдмрдирд╛рдпрд╛ рд╣реИ https://www.npmjs.com/package/reactify-wc

import React from "react";
import reactifyWc from "reactify-wc";

// Import your web component. This one defines a tag called 'vaadin-button'
import "@vaadin/vaadin-button";

const onClick = () => console.log('hello world');

const VaadinButton = reactifyWc("vaadin-button");

export const MyReactComponent = () => (
  <>
    <h1>Hello world</h1>
    <VaadinButton onClick={onClick}>
      Click me!
    </VaadinButton>
  </>
)

рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдорджрджрдЧрд╛рд░ рд╕рд╛рдмрд┐рдд рд╣реЛрдЧрд╛

(рдпрд╣ рдУрдПрд╕рдПрд╕ рдореЗрдВ рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рдкреНрд░рд╡реЗрд╢ рд╣реИ, рдФрд░ рдореЗрд░реЗ рдХрд╛рд░реНрдпрд╛рд▓рдп рд╕реЗ рдмрд╛рд╣рд░ рдХрд┐рд╕реА рдЪреАрдЬ рдХреА рдкрд╣рд▓реА рдУрдкрди рд╕реЛрд░реНрд╕рд┐рдВрдЧ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рд░рдЪрдирд╛рддреНрдордХ рдЖрд▓реЛрдЪрдирд╛ рд╕реНрд╡рд╛рдЧрдд рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ ЁЯШД)

рдмрдврд╝рд┐рдпрд╛ рд░реИрдкрд░ :)

рдпрд╣ рднреА рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╣реИ рдХрд┐ рд╕реНрдЯреИрдВрд╕рд┐рд▓ рдХреЗ рд╕рд╛рде рд╡реЗрдм рдШрдЯрдХреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ: https://stenciljs.com/docs/faq#can -data-be-passed-to-web-components-

@matsgm рдореБрдЭреЗ рдЦреБрд╢реА рд╣реИ рдХрд┐ рд╕реНрдЯреИрдВрд╕рд┐рд▓ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрдорд╛рдг рдиреЗ рдЖрдкрдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рд╛рд╡рдзрд╛рдиреА рдХреЗ рдПрдХ рд╢рдмреНрдж рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдорд╛рд░реЗ рдЕрдиреБрднрд╡ рдореЗрдВ рд╕реНрдЯреИрдВрд╕рд┐рд▓ рдиреЗ рдЕрдиреНрдп рд╡реЗрдм рдШрдЯрдХ рдврд╛рдВрдЪреЗ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкреЙрд▓рд┐рдорд░ рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЦреЗрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдмрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рд╣рдо рдЙрдирдХреЗ рдирд┐рд░реНрдорд╛рдг рдЙрдкрдХрд░рдг, рд╕рдорд░реНрдерди рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рдмреАрдЪ рдЖрдзрд╛ рджрд░реНрдЬрди рдЕрдиреНрдп рдореБрджреНрджреЛрдВ рд╕реЗ рдирд╛рд░рд╛рдЬ рд╣реИрдВред рдЖрдкрдХреА рдорд╛рдЗрд▓реЗрдЬ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддреА рд╣реИ :)

рдмрд╕ рдЗрд╕ рд╕реВрддреНрд░ рдХреЗ рд╕рд╛рде рдЕрдк-рдЯреВ-рдбреЗрдЯ рд░рд╣рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЕрдВрддрд┐рдо рд╕рдорд╛рдзрд╛рди рдХреНрдпрд╛ рд╣реИ?

рдПрдХ рддрд░рд╣ рд╕реЗ рдореИрдВ рдЬрд╛рджреВ рдХреЗ рдЕрдиреБрдорд╛рдиреЛрдВ рдХреЗ рдмрдЬрд╛рдп рд╕реНрдкрд╖реНрдЯ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдПрдЯреАрдЖрд░, рдкреНрд░реЛрдк, рдШрдЯрдирд╛ рдХрд╛ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдкреНрд░рд╢рдВрд╕рдХ рд╣реВрдВ рдЬреЛ рдмрд╣реБрдд рднреНрд░рдорд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЬреИрд╕реЗ snabbdom рд╕реНрдкрд╖реНрдЯ рд╢реАрд░реНрд╖ рд╕реНрддрд░реАрдп рдиреЗрдорд╕реНрдкреЗрд╕рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд╕реЗ рдпрд╣ рдЬрд╛рдирдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреЛрдИ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реЗрд░рдлреЗрд░ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреЗрдЬрд╝ рд╣реИ рдЬреИрд╕реЗ onClick => click рд╕реЗ рдкреНрд░рддреНрдпрдп рдХреЛ рдЯреНрд░рд┐рдо рдХрд░рдирд╛ рдЕрднреА рднреА рдПрдХ рдкреВрд░реНрдг рд╣рд┐рдЯ рд╣реИред

<input attrs={{placeholder: `heyo`}} style={{color: `inherit`}} class={{hello: true, world: false}} on={{click: this.handleClick}} props={{value: `blah`}} />
attr = (attr, val) => elem.setAttribute(attr, val);
prop = (prop, val) => elem[prop] = val;
on  = (event, handler) => elem.addEventListener(event, handler)
style = (prop, val) => elem.style[prop] = val;
class = (name, isSet) => isSet ? elem.classList.add(name) : elem.classList.remove(val)
dataset = (key, val) => elem.dataset[key] = val;

рдореЗрд░реА рдЗрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ JSX рдбреЙрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рде рдиреЗрдорд╕реНрдкреЗрд╕рд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдкреНрд░реЙрдкреНрд╕ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдиреЗрдорд╕реНрдкреЗрд╕ рд╣реЛрдЧрд╛ рдФрд░ рд╣рдо рдмрд╕ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ

<div tabIndex={-1} attr.title={"abcd"} on.click={handler} style.opacity={1} class.world={true} />`

fyi @sebmarkbage ^

const whatever = 'Whatever';
const obj = { a: 1, b: 2 };
const reactComponent = (props) => (
<div>
  ...
  <custom-element attr="{whatever}" someProp={obj} />
  { /* double quotes for attributes */ }
  { /* no quotes for properties */ }
</div>
);

рдпрд╣ рд░рд┐рдПрдХреНрдЯ JSX рдкреНрд░рд╛рдЧреНрдорд╛ рдкрд╛рд░реНрд╕рд░ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рдХрд▓реНрдк propeties (рдпрд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╢рдВрд╕рдХреЛрдВ рдХреЗ рд▓рд┐рдП props ) рдХреЛ рд╕рдВрдкрддреНрддрд┐ рдкрд╛рд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╢рдмреНрдж рдХреЗ рд░реВрдк рдореЗрдВ рд░рдЦрдирд╛ рд╣реИ

рдЪреВрдВрдХрд┐ рдЖрдЬ резрен.реж рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХреНрдпрд╛ рд╣рдо рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдпрд╣ рдкрддрд╛ рдЪрд▓ рд╕рдХреЗ рдХрд┐ рдЗрд╕реЗ рдХрдм рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛?

рд╣рд╛рдВред рд╣рдордиреЗ рдореВрд▓ рд░реВрдк рд╕реЗ рд░рд┐рдПрдХреНрдЯ 17 рдХреЛ рд░рд┐рд▓реАрдЬрд╝ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдереА рдЬрд┐рд╕рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкрджрд╛рд╡рдирдд рд╣рдЯрд╛ рджрд┐рдП рдЧрдП рдереЗ (рдФрд░ рдирдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд╕рд╛рде)ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкреБрд░рд╛рдиреЗ рдХреЛрдбрдмреЗрд╕ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕рднреА рдХреЛрдб рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдмрд╣реБрдд рдпрдерд╛рд░реНрдерд╡рд╛рджреА рдирд╣реАрдВ рд╣реИ, рдФрд░ рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╣рдордиреЗ рд░рд┐рдПрдХреНрдЯ 17 рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИ (рдШрдЯрдирд╛рдПрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рдмрдЬрд╛рдп рд░реВрдЯ рддрддреНрд╡ рд╕реЗ рдЬреБрдбрд╝реА рд╣реИрдВ) ) рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рддрд╛рдХрд┐ рдкреБрд░рд╛рдиреЗ рдРрдкреНрд╕ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рд░рд┐рдПрдХреНрдЯ 17 рдкрд░ рдмрдиреЗ рд░рд╣ рд╕рдХреЗрдВ рдФрд░ рдХреЗрд╡рд▓ рдЙрдирдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ 18+ рдкрд░ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХреЗрдВред

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

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ WC рд╕рдореБрджрд╛рдп рдХреА рдирд╡реАрдирддрдо рдЖрдо рд╕рд╣рдорддрд┐ рдХреНрдпрд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдЗрдирдореЗрдВ рд╕реЗ рдХреМрди рд╕рд╛ рд╡рд┐рдХрд▓реНрдк рдмреЗрд╣рддрд░ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЙрди рд╕рднреА рдХреЛ рдиреАрдЪреЗ рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдмрд╣реБрдд рдорджрджрдЧрд╛рд░ рд╣реИ (рдЙрд╕ рдХрд╛рдо рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП @robdodson рдХреЗ рд▓рд┐рдП рдмрдбрд╝рд╛ рд╕рд╣рд╛рд░рд╛)ред рдореБрдЭреЗ рдЗрд╕ рдмрд╛рдд рдХреА рдЙрддреНрд╕реБрдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕ рдзрд╛рдЧреЗ рдХреЗ рд▓рд┐рдЦреЗ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рд╕реЗ рдЗрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рд▓реЛрдЧреЛрдВ рдХреА рд░рд╛рдп рд╡рд┐рдХрд╕рд┐рдд рд╣реБрдИ рд╣реИ, рдФрд░ рдпрджрд┐ рдХреЛрдИ рдирдИ рдЬрд╛рдирдХрд╛рд░реА рд╣реИ рдЬреЛ рд╣рдореЗрдВ рджрд┐рд╢рд╛ рдЪреБрдирдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддреА рд╣реИред

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ WC рд╕рдореБрджрд╛рдп рдиреЗ рдЕрдкрдирд╛ рдкрд╕рдВрджреАрджрд╛ рд╡рд┐рдХрд▓реНрдк рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИ, рдЬреЛ рдЕрднреА рднреА рд╡рд┐рдХрд▓реНрдк 3 рд╣реИред @Developit рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдмрд╛рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ Preact рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рд╕рдВрдЧрдд рд╣реИ, рдЬреЛ React рдХреЗ рд▓рд┐рдП рднреА рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдореЗрдВ рдкрд╛рд╕рд┐рдВрдЧ (рдЬрдЯрд┐рд▓) рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреИрд╕реЗ рд╕рдВрдЧрдд рд╣реИрдВ, рдЗрд╕рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдЕрд╡рд▓реЛрдХрди рдХреЗ рд▓рд┐рдП, https://custom-elements-everywhere.com/ рдореЗрдВ рд╕рднреА рд╡рд┐рд╡рд░рдг рд╣реИрдВред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ https://github.com/vuejs/vue/issues/7582 рдореЗрдВ , Vue рдиреЗ рд╕рд┐рдЧрд┐рд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪреБрдирд╛, рдФрд░ рдЙрдиреНрд╣реЛрдВрдиреЗ "ред" рдЙрдкрд╕рд░реНрдЧ рдХреЗ рд░реВрдк рдореЗрдВ (рдЧреНрд▓рд┐рдорд░ рдХрд╛ "@" рдирд╣реАрдВ)ред

https://github.com/vuejs/vue/issues/7582#issuecomment -362943450 рдореЗрдВ, @trusktr рдиреЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдХрд┐ рд╕рдмрд╕реЗ рд╕рд╣реА SSR рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди SSR'd HTML рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ sigil'd рдЧреБрдгреЛрдВ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЙрдиреНрд╣реЗрдВ рд╣рд╛рдЗрдбреНрд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рдЬреЗрдПрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЧреБрдгреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд░реЗрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдХрдо рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рд╣рдо рдЕрдХреЗрд▓реЗ рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдирдпрд╛ JSX рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкреЗрд╢ рдХрд░реЗрдВрдЧреЗред

рдПрдХ рд╕рд╡рд╛рд▓ рдпрд╣ рднреА рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд╡рд┐рдХрд▓реНрдк (3) рдХрд░рдиреЗ рд▓рд╛рдпрдХ рд╣реИ, рдпрджрд┐ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрд╕реНрдХрд░рдг (5) рд╕рдВрднрд╡рддрдГ рдореЗрдЬ рдкрд░ рд╣реИред рдпрд╛рдиреА рд╡рд┐рдХрд▓реНрдк (5) рдХрд╕реНрдЯрдо рдорд╛рдЙрдВрдЯ/рдЕрдкрдбреЗрдЯ/рдЕрдирдорд╛рдЙрдВрдЯ/рд╣рд╛рдЗрдбреНрд░реЗрд╢рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд╕рд╛рде рдХрд╕реНрдЯрдо рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рд░рд┐рдПрдХреНрдЯ рдиреЛрдбреНрд╕ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рддрдВрддреНрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рднреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реЛрдВрдЧреЗ)ред

рдЗрд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирдпрд╛ JSX рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп JSX рдХреЛ рдкреЗрд╢ рдХрд░рдиреЗ рдФрд░ рдХрд╕реНрдЯрдо рдЧреБрдгреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?

рдореИрдВрдиреЗ рдмрд╣реБрдд рд╕рдордп рдкрд╣рд▓реЗ рдЬреЗрдПрд╕рдПрдХреНрд╕ рдореЗрдВ рдИрд╕реАрдПрдордПрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдЧрдгрдирд╛ рдХреА рдЧрдИ рд╕рдВрдкрддреНрддрд┐ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд░рдЦрд╛ рдерд╛ (рдлреЗрд╕рдмреБрдХ/рдЬреЗрдПрд╕рдПрдХреНрд╕ # 108) рдФрд░ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рдЬреЛрдбрд╝ рд╣реЛрдЧрд╛ред

рдпрджрд┐ рдХрдВрдкреНрдпреВрдЯреЗрдб рдкреНрд░реЙрдкрд░реНрдЯреА рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЙрдкрд▓рдмреНрдз рдерд╛ рдЬреЛ рдХрдВрдкреНрдпреВрдЯреЗрдб рдкреНрд░реЙрдкрд░реНрдЯреА рд╕рд┐рдВрдЯреИрдХреНрд╕ рдФрд░ рд╕рд┐рдВрдмрд▓ рдпрд╛ рдкреНрд░реАрдлрд╝рд┐рдХреНрд╕реНрдб рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рдЦреБрд▓рд╛ рдЫреЛрдбрд╝ рджреЗрдЧрд╛ред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

import {property} from 'react';
// ...
<custom-img [property('src')]="corgi.jpg" [property('hiResSrc')]="[email protected]" width="100%">

@dantman рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ рд╕рд░реНрд╡рд░ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдФрд░ рд╣рд╛рдЗрдбреНрд░реЗрд╢рди рдХреЛ рдХреИрд╕реЗ рд╣реИрдВрдбрд▓ рдХрд░рддрд╛ рд╣реИ?

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ WC рд╕рдореБрджрд╛рдп рдореЗрдВ рдХреЛрдИ рднреА рд╡рд┐рдХрд▓реНрдк 5 рдЪрд╛рд╣рддрд╛ рд╣реИред

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

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

@gaearon рдореБрдЭреЗ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЬрд▓рдпреЛрдЬрди рдФрд░ рдХрд╕реНрдЯрдо рдЧреБрдг рдирд╣реАрдВ рдкрддрд╛ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдпрд╣ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдПрдХ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИред

рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ property(propertyName) , рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реБрдП рдХрд┐ рдЖрдк рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдПрдХ рдкреНрд░реАрдлрд╝рд┐рдХреНрд╕реНрдб рд╕реНрдЯреНрд░рд┐рдВрдЧ (рдЬреИрд╕реЗ '__REACT_INTERNAL_PROP__$' + propertyName ) рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдПрдХ рд╕рд┐рдВрдмрд▓ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдПрдХ "рд╕рд┐рдВрдмрд▓ => рдкреНрд░реЙрдкрд░реНрдЯреАрдирд╛рдо" рдПрд╕реЛрд╕рд┐рдПрд╢рди рдХреЛ рд╕рд╣реЗрдЬ рд╕рдХрддрд╛ рд╣реИред рдирдХреНрд╖рд╛ред

рдмрд╛рдж рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдЖрдкрдХреЛ рдЙрд╕ рдорд╛рдирдЪрд┐рддреНрд░ рдХреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

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

рдПрдХ рд╡реЗрдм рдШрдЯрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд▓реЗрдЦрдХ рдХреЗ рд░реВрдк рдореЗрдВ, рд╡рд┐рдХрд▓реНрдк 5 рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИред рдореИрдВ рдкреНрд░рддреНрдпреЗрдХ рдврд╛рдВрдЪреЗ рдФрд░ рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдХреАрдорд╛ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рдХрд╕реНрдЯрдо рддрддреНрд╡ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдФрд░ рдХрдИ рдХрд╕реНрдЯрдо рддрддреНрд╡ рд▓реЗрдЦрдХ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рд╕рд╕реЗ рд░рд┐рдПрдХреНрдЯ рдбреЗрд╡рд▓рдкрд░ рдкрд░ рдмреЛрдЭ рдмрдврд╝ рдЬрд╛рдПрдЧрд╛ред

рд╡рд┐рдХрд▓реНрдк 5 рд╕реЗ рдХреЛрдИ рдирд╣реАрдВ рдЬреАрддрддрд╛ред

@claviska рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рд░рд╛рдп рд╣реИ рдХрд┐ рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдкрд╛рджрди рдФрд░ рд╣рд╛рдЗрдбреНрд░реЗрд╢рди рдХреЛ рдЕрдзрд┐рдХ рдирд┐рд╣рд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?

@gaearon SSR рджреЛ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдЙрдк-рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реЛрдЧрд╛: рд╡реЗ рдЬрд╣рд╛рдБ рдХрд╕реНрдЯрдо рддрддреНрд╡ SSR рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЬрд╣рд╛рдБ рдпрд╣ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдЙрди рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ SSR рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд╕рд░реНрд╡рд░ рдкрд░ рдЧреБрдг рд╕реЗрдЯ рдХрд░рдирд╛ рдХреЛрдИ рдорд╛рдпрдиреЗ рдирд╣реАрдВ рд░рдЦрддрд╛ред id рдФрд░ className рдЬреИрд╕реЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдЧреБрдгреЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдЙрдиреНрд╣реЗрдВ рдЫреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

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

рдПрд╕рдПрд╕рдЖрд░ рдкрд░ рдореЗрд░реА рдЯреАрдо рдХреЗ рдХрд╛рдо рдореЗрдВ рд╣рдордиреЗ createElement рдХреЛ рдкреИрдЪ рдХрд░рдХреЗ рдФрд░ dangerouslySetInnerHTML рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░рд┐рдПрдХреНрдЯ рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд┐рдпрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХреАрдХрд░рдг/рдкреНрд░рдпреЛрдЧ рдХрд╛ рд╕реНрддрд░ рд╣реИ рдЬрд┐рд╕ рдкрд░ рд╣рдо рдереЛрдбрд╝реЗ рд╕рдордп рдХреЗ рд▓рд┐рдП рд░рд╣реЗрдВрдЧреЗред рдЬрд▓реНрдж рд╣реА рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╣рдо SSR рд╕рд┐рд╕реНрдЯрдо рдХреЗ рднреАрддрд░ рдЗрдВрдЯрд░рдСрдк рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рднреВрдорд┐ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдкрд░ рдЕрднрд┐рд╕рд░рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рддрдм рддрдХ _deep_ SSR рдХреЗ рдмрд┐рдирд╛ рдХрд╕реНрдЯрдо рдПрд▓реАрдореЗрдВрдЯ рдкреНрд░реЙрдкрд░реНрдЯреА рдФрд░ рдЗрд╡реЗрдВрдЯ рд╕рдкреЛрд░реНрдЯ рд╣реЛрдирд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рдФрд░ рд╡рд┐рд╡реЗрдХрдкреВрд░реНрдг рд╣реИред рддрддреНрд╡ рдХрд╛ рдЯреИрдЧ рдЕрднреА рднреА рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдШрдЯрдХ рдХреЗ рдмрдЪреНрдЪреЗ рдХреЗ рд░реВрдк рдореЗрдВ SSR'ed рд╣реЛрдЧрд╛ рдЬреИрд╕рд╛ рдХрд┐ рдЖрдЬ рд╣реИред

рдЖрдИрдбреА рдФрд░ рдХреНрд▓рд╛рд╕рдирд╛рдо рдЬреИрд╕реЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдЧреБрдгреЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдЙрдиреНрд╣реЗрдВ рдЫреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдХреНрдпрд╛ рдЖрдк рдореБрдЭреЗ рдпрд╣ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХрд╣реЗрдВ рдХрд┐ <github-icon iconname="smiley" /> ред рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ SSR рдХреЛ HTML рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХреЗрд╡рд▓ <github-icon /> рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдлрд┐рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЬрд▓рдпреЛрдЬрди рдХреЗ рджреМрд░рд╛рди domNode.iconname = ... рд╕реЗрдЯ рдХрд░реЗрдЧреА? рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдпрджрд┐ рдХрд╕реНрдЯрдо рддрддреНрд╡ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╣рд╛рдЗрдбреНрд░реЗрд╢рди рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд▓реЛрдб рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред github-icon рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдХреИрд╕реЗ рдкрддрд╛ рдЪрд▓реЗрдЧрд╛ рдХрд┐ HTML рдореЗрдВ iconname рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рдХреМрди рд╕рд╛ рдЖрдЗрдХрди рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рд╣реИ?

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

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

@gaearon рдпрджрд┐ рд░рд┐рдПрдХреНрдЯ рд╣рд╛рдЗрдбреНрд░реЗрд╢рди рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрд╕реНрдЯрдо рддрддреНрд╡ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд▓реЛрдб рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ iconname рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдбреИрдлреЙрд▓реНрдЯ рдорд╛рди рдХреЛ рдЬреЛ рдХреБрдЫ рднреА рдЕрд╕рд╛рдЗрди рдХрд░реЗрдЧрд╛ред рдЖрдкрдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ if _iconname_ does not exist in the HTML ? рдпрджрд┐ HTMLElement рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖рддрд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рдЗрд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджреЗрдЧрд╛ред рдПрдХ рдмрд╛рд░ рдХрд╕реНрдЯрдо рддрддреНрд╡ рдкрд░рд┐рднрд╛рд╖рд╛ рд▓реЛрдб рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ HTMLElement рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдЧрд╛ рдФрд░ iconname рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдЧрд╛ рдФрд░ рдкрд╛рд░рд┐рдд рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдирдП рдорд╛рди рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ред

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

рдореЗрд░реА рдЕрдм рддрдХ рдХреА рд╕рдордЭ рдпрд╣ рд╣реИ рдХрд┐:

  1. рд╡реЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд░реЗрдВрдбрд░ рдкрд░рд┐рдгрд╛рдо рджреЗрдЦрддреЗ рд╣реИрдВред рдЗрд╕рдореЗрдВ рд╕рднреА рд╕рд╛рдорд╛рдиреНрдп рдорд╛рд░реНрдХрдЕрдк рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╡реЗ <github-icon> рдХрд╕реНрдЯрдо рддрддреНрд╡ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рджреЗрдЦреЗрдВрдЧреЗред рд╕рдВрднрд╡рддрдГ рдпрд╣ рдПрдХ рдЦрд╛рд▓реА рдбрд┐рд╡ рдХреА рддрд░рд╣ рдПрдХ рдЫреЗрдж рд╣реЛрдЧрд╛ред рдореБрдЭреЗ рд╕рд╣реА рдЬрд╡рд╛рдм рджреЛ рдЕрдЧрд░ рдореИрдВ рдЧрд▓рдд рд╣реВрдБ (?)ред рдЗрд╕рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЕрднреА рддрдХ рд▓реЛрдб рдирд╣реАрдВ рд╣реБрдЖ рд╣реИред

  2. <github-icon> рдХрд╕реНрдЯрдо рддрддреНрд╡ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд▓реЛрдб рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдкрдВрдЬреАрдХреГрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдЧрд░ рдореИрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдордЭреВрдВ, рддреЛ рдпрд╣ "рдЕрдкрдЧреНрд░реЗрдбрд┐рдВрдЧ" рдирд╛рдордХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рднрд▓реЗ рд╣реА рдЗрд╕рдХрд╛ JS рддреИрдпрд╛рд░ рд╣реИ, рдлрд┐рд░ рднреА рдпрд╣ рдХреБрдЫ рднреА рдирд╣реАрдВ рджрд┐рдЦрд╛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ HTML рдореЗрдВ iconname рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХрд┐рд╕ рдЖрдЗрдХрди рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рд╣реИред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рдкрд╣рд▓реЗ рдХрд╣рд╛ рдерд╛ рдХрд┐ "рдЧреИрд░-рдмрд┐рд▓рд┐рди рдЧреБрдгреЛрдВ рдХреЛ HTML рд╕реЗ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ"ред рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрднреА рднреА рдПрдХ "рдЫреЗрдж" рджреЗрдЦрддрд╛ рд╣реИред

  3. рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рд▓реЛрдб рд╣реЛрддрд╛ рд╣реИред рд╣рд╛рдЗрдбреНрд░реЗрд╢рди рд╣реЛрддрд╛ рд╣реИред рд╣рд╛рдЗрдбреНрд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди, рд░рд┐рдПрдХреНрдЯ .iconname = рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдЕрдиреБрдорд╛рди рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдм рдЖрдЗрдХрди рджреЗрдЦ рд╕рдХрддрд╛ рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рдЙрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╣реА рдмреНрд░реЗрдХрдбрд╛рдЙрди рд╣реИ рдЬрд╣рд╛рдВ рдХрд╕реНрдЯрдо рддрддреНрд╡ рдЬреЗрдПрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд╣рд▓реЗ рд▓реЛрдб рд╣реЛрддрд╛ рд╣реИ? рдХреНрдпрд╛ рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ WC рд╕рдореБрджрд╛рдп рдХреЗ рд▓рд┐рдП рд╡рд╛рдВрдЫрдиреАрдп рд╣реИ?

@gaearon рд╣рд╛рдБ, рдореИрдВ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдРрд╕рд╛ рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░реВрдВрдЧрд╛ред

рджреВрд╕рд░реА рдУрд░, рддреАрди рд╕рд╛рд▓ рд╣реЛ рдЧрдП рд╣реИрдВ, рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЖрдо рд╕рд╣рдорддрд┐ рдЕрднреА рддрдХ рдирд╣реАрдВ рдмрдиреА рд╣реИ

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

рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдЗрд╕ рдЕрдВрддрд░ рдХреЛ рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ (рдЧрд╣рд░рд╛ рдмрдирд╛рдо рдЙрдерд▓рд╛) рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдкреБрди: рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдХрд┐ рдХреНрдпрд╛ рдореИрдВрдиреЗ рдЖрдкрдХреЛ рд╕рдордЭрд╛ рд╣реИред

"рдбреАрдк" рдПрд╕рдПрд╕рдЖрд░ рд╕реЗ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рдорддрд▓рдм рдПрд╕рдПрд╕рдЖрд░ рдХреЗ рд╕рдорд╛рди рд╣реИ рдХрд┐ рдпрд╣ рд░рд┐рдПрдХреНрдЯ рдШрдЯрдХреЛрдВ рдореЗрдВ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рдПрдХ рд╕реАрдИ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рд╕реЗ рдПрдХ рдЖрдЙрдЯрдкреБрдЯ рдЙрддреНрдкрдиреНрди рд╣реЛрдЧрд╛ рдЬрд┐рд╕реЗ рд╕реАрдИ рдХреЗ рддрд░реНрдХ рд▓реЛрдб рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рдЖрдк рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рд╣рдореЗрдВ рдЕрднреА рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рдореЗрд░реЗ рд▓рд┐рдП рдЙрд╕рдХрд╛ рдорддрд▓рдм рдмрдирддрд╛ рд╣реИред

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

рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, https://github.com/facebook/react/issues/11347#issuecomment -ренрезрейреирейрежрелренреи рдПрдХ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ _рдкрд╣рд▓реЗ рд╕реЗ рд╣реА CE рд▓реЙрдЬрд┐рдХ рдбрд╛рдЙрдирд▓реЛрдб рд╣реЛрдиреЗ рдкрд░ рднреА, рд╣рдо рд╣рд╛рдЗрдбреНрд░реЗрд╢рди рддрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдХреБрдЫ рднреА рдирд╣реАрдВ рджрд┐рдЦрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЧреБрдг рддрдм рддрдХ рдЕрдЬреНрдЮрд╛рдд рд░рд╣рддреЗ рд╣реИрдВ рдЬрдм рддрдХ рдХрд┐ рдкреВрд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ JS рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛрдб рд▓реЛрдб рдФрд░ рд╣рд╛рдЗрдбреНрд░реЗрд╢рди рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛ред рдореИрдВ рдкреВрдЫ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИред

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

@gaearon

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ https://github.com/facebook/react/issues/11347#issuecomment -713230572 рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

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

рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рдорд╛рдорд▓реЗ рдХреЛ рд╕реАрдзреЗ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ iconname рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдЕрднреА рднреА рд╣рд╛рдЗрдбреНрд░реЗрд╢рди рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд┐рдП рдмрд┐рдирд╛ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдЕрдВрддрд┐рдо рд░реВрдк рд╕реЗ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реЛрдЧрд╛ред

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

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

рдпрд╣ рдпрд╛ рддреЛ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреЗрд╡рд▓ рд╕рд╛рджрд╛ рд╕реЗрдЯрд┐рдВрдЧ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рджреНрд╡рд╛рд░рд╛ рдпрд╛ рд╕реНрд▓реЙрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднрд╛рдЧ рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдШрдЯрдХ рдЕрдкрдЧреНрд░реЗрдб рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣реА рд╕рд╛рдордЧреНрд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛред


рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХрддрд░ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧреА рдЬрд┐рдирдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕, рдПрд░реЗ, рдлрд╝рдВрдХреНрд╢рдВрд╕ рдЗрддреНрдпрд╛рджрд┐ рдЧреБрдг рд╣реИрдВред

рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, lit-virtualizer рд╡рд░реНрдЪреБрдЕрд▓ рд╕реНрдХреНрд░реЛрд▓рд░ рдШрдЯрдХ рд▓реЗрдВред

рдЗрд╕рдХреЗ рд▓рд┐рдП рдареАрдХ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ items рд╕рд░рдгреА рдФрд░ renderItem рдлрд╝рдВрдХреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рдЖрдк рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ scrollTarget рддрддреНрд╡ рднреА рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рд╕рднреА рдХреЛ рдХреЗрд╡рд▓ рд░реЗрдлрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░рд┐рдПрдХреНрдЯ рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддреБрд░рдВрддред

рдЗрд╕ рддрд░рд╣ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рд╢рд╛рдпрдж рд╕рд╛рдордЧреНрд░реА рдХреЛ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреЗрдЬрд┐рдиреЗрд╢рди рдпрд╛ рдЖрд▓рд╕реА рд▓реЛрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд▓реЛрдб рдХрд░ рд░рд╣реЗ рд╣реЛрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рдХрд┐рд╕реА рднреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рддрдм рддрдХ рдирд╣реАрдВ рд░рдЦрдирд╛ рдЬрдм рддрдХ рдХрд┐ рдПрд╕рдПрд╕рдЖрд░ рдорд╛рдорд▓реЗ рдкрд░ рд╣рд╛рдЗрдбреНрд░реЗрд╢рди рдЪрд░рдг рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рди рд╣реЛред

@gaearon рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдХрд╕реНрдЯрдо рддрддреНрд╡ рдПрдХ рдбреАрдУрдПрдо рдорд╛рдирдХ рд╣реИрдВ рдФрд░ рдЗрд╕рд▓рд┐рдП рдкреНрд░рддрд┐ "рдбрдмреНрд▓реНрдпреВрд╕реА рд╕рдореБрджрд╛рдп" рдЗрд╕ рдЕрд░реНрде рдореЗрдВ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рд▓реЛрдЧ рдЙрд╕реА рддрд░рд╣ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдХрд╕реНрдЯрдо рддрддреНрд╡ рдкреНрд░рддреНрдпреЗрдХ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рддрд░реАрдХреЗ рд╕реЗ рдПрдХреАрдХреГрдд рд╣реЛрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдЖрджрд┐рдо рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рди рдкрд░ рд▓реЛрдЧ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВред

рдЙрд╕ рдиреЗ рдХрд╣рд╛, рд╕рдордп рдХреЗ рд╕рд╛рде рдХрдИ рдкреИрдЯрд░реНрди рд╕рд╛рдордиреЗ рдЖрдП рд╣реИрдВ рдФрд░ рд╕рднреА рд▓реЛрдХрдкреНрд░рд┐рдп рдврд╛рдВрдЪреЗ (рд░рд┐рдПрдХреНрдЯ рдХреЛ рдЫреЛрдбрд╝рдХрд░) рдЗрд╕ рдбреЛрдо рдорд╛рдирдХ рдХреЗ рд▓рд┐рдП рд╕рдВрдЧрддрддрд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рдорд╛рдзрд╛рди рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк https://custom-elements-everywhere.com/ рдкрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рднреА рдлреНрд░реЗрдорд╡рд░реНрдХ/рд▓рд╛рдЗрдмреНрд░реЗрд░реА (рд░рд┐рдПрдХреНрдЯ рдХреЛ рдЫреЛрдбрд╝рдХрд░) рдиреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд┐рдХрд▓реНрдк рдЪреБрдиреЗ рд╣реИрдВред рдЗрд╕ рдЕрдВрдХ рдореЗрдВ, рдЪреБрдиреЗ рдЧрдП рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рд╡рд┐рдХрд▓реНрдк 1, 2 рдФрд░ 3 рдХреЗ рд░реВрдк рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдХреЛрдИ рдврд╛рдВрдЪрд╛/рдкреБрд╕реНрддрдХрд╛рд▓рдп рдирд╣реАрдВ рд╣реИ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╡рд┐рдХрд▓реНрдк 4 рдпрд╛ 5 рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЗрдиреНрд╣реЗрдВ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╡рд╛рдВрдЫрдиреАрдп рд╣реИред

рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рд░рд┐рдПрдХреНрдЯ рдЕрдиреНрдп рдврд╛рдВрдЪреЗ/рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИ рдФрд░ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдЪреБрдирддрд╛ рд╣реИ рдЬреЛ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдк 1-3 рдореЗрдВ рд╕реЗред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд░рд┐рдПрдХреНрдЯ рдХреЛ рд╡рд┐рдХрд▓реНрдк 4 рдпрд╛ 5 рдЪреБрдирдХрд░ рдкрд╣рд┐рдпрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЛрдИ рдбреЗрдЯрд╛ рдирд╣реАрдВ рд╣реИ, рдЬреЛ рд░рд┐рдПрдХреНрдЯ рдпрд╛ рдбреАрдУрдПрдо рдорд╛рдирдХреЛрдВ рдкрд░ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП рджреАрд░реНрдШрдХрд╛рд▓рд┐рдХ рд░рдЦрд░рдЦрд╛рд╡ рдпреЛрдЧреНрдп рд╕рдорд╛рдзрд╛рди рд╣реИред

рдЗрд╕рд▓рд┐рдП, рдЙрдиреНрдореВрд▓рди рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ (рдиреАрдЪреЗ рд▓рд┐рдВрдХ рдХреА рдЧрдИ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде), рдЪреВрдВрдХрд┐ рд╡рд┐рдХрд▓реНрдк 3 JSX рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдФрд░ рд╡рд┐рдХрд▓реНрдк 4 рдФрд░ 5 рдХреЛ рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ WC рд▓реЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЕрд╡рд╛рдВрдЫрдиреАрдп рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╣рдо 1 рдпрд╛ 2 рдХреЗ рд╕рд╛рде рдлрдВрд╕ рдЧрдП рд╣реИрдВ .

рдФрд░ рдЪреВрдВрдХрд┐ 1 рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рдЕрд╕реНрдерд┐рд░ рдХрдорд┐рдпрд╛рдВ рд╣реИрдВ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдХрд▓реНрдк 2 рдПрдХ рд╣реИ? рдкреНрд░реАрдПрдХреНрдЯ рдпрд╣ рдХреИрд╕реЗ рдХрд░рддрд╛ рд╣реИ рдЗрд╕рдХреЗ рд╕рд╛рде рдЬрд╛рдУ?


рдХреЛрдИ рдврд╛рдВрдЪрд╛/рдкреБрд╕реНрддрдХрд╛рд▓рдп рдирд╣реАрдВ рд╣реИ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╡рд┐рдХрд▓реНрдк 4 рдпрд╛ 5 рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЗрдиреНрд╣реЗрдВ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╡рд╛рдВрдЫрдиреАрдп рд╣реИред

( @TimvdLippe https://github.com/facebook/react/issues/11347#issuecomment-713474037) рдореЗрдВ

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдХрдо рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рд╣рдо рдЕрдХреЗрд▓реЗ рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдирдпрд╛ JSX рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкреЗрд╢ рдХрд░реЗрдВрдЧреЗред

( @gaearon https://github.com/facebook/react/issues/11347#issuecomment-713210204 рдореЗрдВ)

рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рд╣рд╛рдБ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рд╕рд╛рд░рд╛рдВрд╢ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдореИрдВ

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

рдореИрдВ рдХрд╛рдлреА рдлреЙрд▓реЛ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореЗрд░реЗ рдХрд╛рд▓реНрдкрдирд┐рдХ рдкрд░рд┐рджреГрд╢реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдереА https://github.com/facebook/react/issues/11347#issuecomment рдЬреЛ рдПрдХ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рд╣рдо рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдлреЗрдВрдХрдирд╛ рд╕рдм рдкрд░ рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рдЬреЗрдирд░реЗрдЯ HTML рдореЗрдВ рдЧреБрдг, рдХреЗ рдЕрд▓рд╛рд╡рд╛ рддрд░рд╣ рд▓рдЧ рд░рд╣рд╛ рдерд╛ -+ренрез,рейреи,реирей,ремреирео

  1. рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ рд╕рд░реНрд╡рд░-рдЬрдирд░реЗрдЯреЗрдб HTML рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдХреНрд░рдордмрджреНрдз рд╣реЛрддрд╛ рд╣реИ
    рдПред рдорд╛рдорд▓реЗ рдореЗрдВ <github-icon iconname="smiley" />
    рдмреАред рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдк рд▓рд╛рдП рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП <github-icon icon={{ name: "smiley" }} />
  2. рдЗрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рд╛рдЗрдбреНрд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ DOM API рдХреЛ рдХреНрдпрд╛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ

рдзрдиреНрдпрд╡рд╛рдж!

рдХреНрдпрд╛ рдЗрд╕реЗ рдПрдХ рдХрд╕реНрдЯрдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде React.createElement() рдЬрдЧрд╣ рдПрдХ рд╢рд┐рдо рдмрдирд╛рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдорд╛рдирд╛ рдЬрд╛рддрд╛ рдерд╛, рдЬреЛ рдЕрдВрджрд░ рдЧреБрдг рдореИрдкрд┐рдВрдЧ рдХрд░рддрд╛ рд╣реИ?

рдЙрдкрдпреЛрдЧ рдЙрджрд╛рд╣рд░рдг:

/** <strong i="8">@jsx</strong> h */
import { h } from 'react-wc-jsx-shim';

function Demo({ items }) {
   return <my-custom-list items={items} />
}

рдорд╕реМрджрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:

export function h(element, props, children) {
   if(typeof element === 'string' && element.includes('-')) {
      return React.createElement(Wrapper, { props, customElementName: element }, children)
   }
   return React.createElement(element, props, children);

}

function Wrapper({customElementName, props}) {
   const ref = React.useRef();
   React.useEffect(() => {
      for(const prop in props) {
         ref.current[prop] = props[prop];
      }
   });
   return React.createElement(customElementName, { ref, ...props });
}

рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕реБрд╡рд┐рдзрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрд╣реБрдд рдХрдо рдУрд╡рд░рд╣реЗрдб рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЕрдирдмреНрд▓реЙрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

@ рдЬрд╕реНрдЯ-рдмреЛрд░рд┐рд╕ рдЬреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рдРрдк рдпрд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЕрдм рдХрд░рддреЗ рд╣реИрдВ, рдпрд╛ рддреЛ createElement рдкреИрдЪ рдпрд╛ рдПрдХ рд░реИрдкрд░ рдХреЗ рд╕рд╛рдеред рдЖрдкрдХреЛ рд░рд┐рдПрдХреНрдЯ рдореЗрдВ рд╡рд┐рд╢реЗрд╖-рдЖрд╡рд░рдг рд╡рд╛рд▓реЗ рд╕рдВрдкрддреНрддрд┐ рдирд╛рдореЛрдВ рдХреЛ рднреА рдмрд╛рд╣рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдХреЛрдИ рдирд┐рд░реНрдпрд╛рдд рдХреА рдЧрдИ рд╕реВрдЪреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡реЗ ['children', 'localName', 'ref', 'elementRef', 'style', 'className'] рдЬреИрд╕реЗ рдПрдХ рдЗрдирдХрд╛рд░ рд╕реВрдЪреА рдХреЛ рд╣рд╛рд░реНрдб рдХреЛрдб рдХрд░рддреЗ рд╣реИрдВред

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

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрд╕рдПрд╕рдЖрд░ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдШрдЯрдирд╛рдУрдВ рд╕реЗ рдЕрдзрд┐рдХ рдЪрд┐рдВрддрд┐рдд рд░рд╣реВрдВрдЧрд╛ред рд░рд┐рдПрдХреНрдЯ рдореЗрдВ рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдпрд╣ рдмреБрдирд┐рдпрд╛рджреА рдбреЛрдо рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░рдСрдкрд░реЗрдмрд┐рд▓рд┐рдЯреА рдореЗрдВ рдПрдХ рдмрдбрд╝рд╛ рдЫреЗрдж рд╣реИред

рдХреНрдпрд╛ рдЗрд╕реЗ рдПрдХ рдХрд╕реНрдЯрдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде React.createElement() рдХреА рдЬрдЧрд╣ рдПрдХ рд╢рд┐рдо рдмрдирд╛рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдорд╛рдирд╛ рдЬрд╛рддрд╛ рдерд╛, рдЬреЛ рдЕрдВрджрд░ рдЧреБрдг рдореИрдкрд┐рдВрдЧ рдХрд░рддрд╛ рд╣реИ?

рдЬреИрд╕рд╛ рдХрд┐ рдореВрд▓ рдЕрдВрдХ рдореЗрдВ рд░реЙрдм рджреНрд╡рд╛рд░рд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдореИрдВрдиреЗ рдЕрддреАрдд рдореЗрдВ https://github.com/skatejs/val рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕рдХрд╛ рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдПрдХ рдХрд╕реНрдЯрдо JSX рдкреНрд░рд╛рдЧреНрдорд╛ рд╣реЛрдирд╛ рдЬреЛ React.createElement рдХреЛ рд▓рдкреЗрдЯрддрд╛ рд╣реИ рдПрдХ рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рд╣реИ - рд╕рдВрднрд╡рддрдГ рдЕрд▓реНрдкрдХрд╛рд▓рд┐рдХ - рд╕рдорд╛рдзрд╛рдиред

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


рдореИрдВ рдЕрдм рдУрдкрди рд╕реЛрд░реНрд╕ рдореЗрдВ рдЬреНрдпрд╛рджрд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛, рдФрд░ рди рд╣реА рдЕрдм рдЯреНрд╡рд┐рдЯрд░ рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдмреЗрдЭрд┐рдЭрдХ рдореЗрд░реА рд░рд╛рдп рдирдордХ рдХреЗ рджрд╛рдиреЗ рдХреЗ рд╕рд╛рде рд▓реЗрдВред

рд╡рд┐рдХрд▓реНрдк 1 рдРрд╕рд╛ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдХрд▓реНрдк 2 рдХреЗ рд▓рд┐рдП рд╢реИрддрд╛рди рдХреЗ рд╡рдХреАрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдореМрдЬреВрдж рд╣реИред

рд╡рд┐рдХрд▓реНрдк 2 рдЬрд╛рдиреЗ рдХрд╛ рд░рд╛рд╕реНрддрд╛ рд▓рдЧрддрд╛ рд╣реИред рдпрд╣ рдкреНрд░реАрдПрдХреНрдЯ рдиреЗ рдЬреЛ рдХрд┐рдпрд╛ рд╣реИ, рдЙрд╕рдХреЗ рдХрд░реАрдм рд╣реИ, рдЗрд╕рд▓рд┐рдП рдПрдХ рдорд┐рд╕рд╛рд▓ рдФрд░ рдПрдХ рд╕рд╛рдореБрджрд╛рдпрд┐рдХ рдорд╛рдирдХ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ (рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реИрд╕реЗ рднреА рдХрд░рдирд╛ рд╢рд╛рдирджрд╛рд░ рд╣реЛрдЧрд╛; JSX рдиреЗ рджрд┐рдЦрд╛рдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ), рдФрд░ рдпрд╣ рд░рд┐рдПрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдХрджрдо рднреА рд╣реИред (рд╡рд┐рдХрд▓реНрдк 1 рдХреЗ рд╡рд┐рдкрд░реАрдд)ред

рд╡рд┐рдХрд▓реНрдк 3 рдХрд╛рдЧрдЬ рдкрд░ рдЕрдЪреНрдЫрд╛ рджрд┐рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рддрд╛рд░реНрдХрд┐рдХ рд░реВрдк рд╕реЗ рдпрд╣ рд╕рдВрдЬреНрдЮрд╛рдирд╛рддреНрдордХ рдУрд╡рд░рд╣реЗрдб рдХреЗ рдХрд╛рд░рдг рд╡рд┐рдХрд▓реНрдк 2 рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реЛрдЧрд╛, рдЙрдХреНрдд рдУрд╡рд░рд╣реЗрдб рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬреАрдХрд░рдг, рдФрд░ рдПрд╕рдПрд╕рдЖрд░ рдХреЗ рд╕рд╛рде рдЕрдЬреНрдЮрд╛рддред

рдЬреИрд╕рд╛ рдХрд┐ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдореИрдВрдиреЗ рдореВрд▓ рд░реВрдк рд╕реЗ рд╡рд┐рдХрд▓реНрдк 4 рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдерд╛ рд▓реЗрдХрд┐рди рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЕрдм рдпрд╣ рдкрд╕рдВрдж рд╣реИред рдЖрдк рдЗрд╕реЗ рдЕрдзрд┐рдХ рдСрдкреНрдЯ-рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдЖрдк рд╕реНрдкрд╖реНрдЯ props рдФрд░ events ( attrs рдмрдЬрд╛рдп) рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рд╡рд┐рдХрд▓реНрдк 2 рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рдХреЗ рдХрдо рдЬреНрдЮрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рдЗрд╕реЗ рдЕрдкрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред

рд╡рд┐рдХрд▓реНрдк 5 рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдореВрд▓ рдореБрджреНрджреЗ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред


рдПрдХ рддрд░рдл, рдореИрдВ рдЗрд╕ рдкрд░ рдХрд░реНрд╖рдг рджреЗрдЦрдХрд░ рдмрд╣реБрдд рдЦреБрд╢ рд╣реВрдВ рдФрд░ рдЖрд╢рд╛ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рд╕рдм рдЕрдЪреНрдЫрд╛ рдХрд░ рд░рд╣реЗ рд╣реЛрдВрдЧреЗ!

рдпрджрд┐ рдкреНрд░рдпреЛрдХреНрддрд╛ рднреВрдорд┐ рдореЗрдВ рдХреЛрдИ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рд╣реИ, рддреЛ рдХреНрдпрд╛ рдЗрд╕реЗ рд╕рдореБрджрд╛рдп рджреНрд╡рд╛рд░рд╛ рд╕рдореЗрдХрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдлрд┐рд▓рд╣рд╛рд▓ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╢рдВрд╕рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

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

рдпрджрд┐ рдкреНрд░рдпреЛрдХреНрддрд╛ рднреВрдорд┐ рдореЗрдВ рдХреЛрдИ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рд╣реИ, рддреЛ рдХреНрдпрд╛ рдЗрд╕реЗ рд╕рдореБрджрд╛рдп рджреНрд╡рд╛рд░рд╛ рд╕рдореЗрдХрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдлрд┐рд▓рд╣рд╛рд▓ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╢рдВрд╕рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

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

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ vuejs/vue#7582 рдореЗрдВ, Vue рдиреЗ рд╕рд┐рдЧрд┐рд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪреБрдирд╛, рдФрд░ рдЙрдиреНрд╣реЛрдВрдиреЗ "ред" рдЙрдкрд╕рд░реНрдЧ рдХреЗ рд░реВрдк рдореЗрдВ (рдЧреНрд▓рд┐рдорд░ рдХрд╛ "@" рдирд╣реАрдВ)ред

рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕ рдкрд░ рдПрдХ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдмрдпрд╛рди рдХрд╛ рд▓рд┐рдВрдХ рдирд╣реАрдВ рд╣реИ (рдФрд░ рд╢рд╛рдпрдж Vue рдХреЗ рдХрд░реАрдм рдХреЛрдИ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реИ), рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ Vue 3.0 рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рдХрд▓реНрдк 2 рдореЗрдВ рдЪрд▓рд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрд╣ Preact рдХреЗ рд╕рдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИред (рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рджреЗрдЦреЗрдВред)

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

рдХреНрдпрд╛ рдЖрдк https://github.com/facebook/react/issues/11347#issuecomment -713514984 рдореЗрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рдЙрддреНрддрд░ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ? рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИ рдХрд┐ рд╣рдо рдПрдХ-рджреВрд╕рд░реЗ рд╕реЗ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдореИрдВ рд╕рд┐рд░реНрдл рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рддрд░реАрдХреЗ рд╕реЗ рдкреВрд░реЗ рдЗрдЪреНрдЫрд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдХреНрдпрд╛ рд╕реЗрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдХрд┐рд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреНрд░рдордмрджреНрдз рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдкреНрд░реАрдПрдХреНрдЯ + рдбрдмреНрд▓реНрдпреВрд╕реА рджреЗрд╡ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛ рдпрд╣рд╛рдВ рдареЛрдХрд░ рдЦрд╛рдИ, рдореИрдВ рдпрд╣ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ "рд╡рд┐рдХрд▓реНрдк 2" рди рдХреЗрд╡рд▓ рдПрдХ _рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди_ рд╣реИ, рдмрд▓реНрдХрд┐ рдПрдХ _рдЕрдкреВрд░реНрдг рд╕рдорд╛рдзрд╛рди_ рднреА рд╣реИ (рдкреНрд░реАрдХреНрдЯ рдЕрднреА рднреА рдХреЗрд╡рд▓ рд╡реИрдз рд╡реЗрдм рдШрдЯрдХреЛрдВ рдХреЗ рд╕рдмрд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдШреЛрд╖рдгрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдмрд╛рддрдЪреАрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ)ред

рдЕрдиреБрдорд╛рдиреА рдХреЗ рд╡рд░реНрддрдорд╛рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рднреА, рдпрд╣ рд▓рдВрдмреЗ рд╕рдордп рдореЗрдВ рд╢рд╛рдпрдж рд╣реА рд╡рд╛рдВрдЫрдиреАрдп рд▓рдЧрддрд╛ рд╣реИред


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

рдпрд╛рдиреА JSX рдХреЗ рдиреАрдЪреЗ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж:

<web-component key={'key'} ongoing={true} children={[1, 2]} />

properties key , ongoing рдФрд░ children рд╕рднреА undefined (рдпрд╛ рдЬреЛ рднреА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рд╣реИ) web-component рдХреЗ рдмрдирд╛рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╣реЛрдВрдЧреЗред

рд╕рд╛рде рд╣реА, рдУрдкреА рдХреЗ рд╡рд┐рдкрд░реАрдд, рдпрд╣ рд╡рд┐рдХрд▓реНрдк рднреА рдПрдХ рдмреНрд░реЗрдХрд┐рдВрдЧ рдмрджрд▓рд╛рд╡ рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ рд╡реЗрдм рдШрдЯрдХ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП lit-element ) рд╢реБрджреНрдз HTML рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреНрд░рдордмрджреНрдз рд╕рдореГрджреНрдз рдбреЗрдЯрд╛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рдРрд╕реЗ рдШрдЯрдХреЛрдВ рдХреЛ рд░рд┐рдПрдХреНрдЯ рд╕реЗ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреИрд╕реЗ

<web-component richdata={JSON.stringify(something)} />

рдЬреЛ "рд╡рд┐рдХрд▓реНрдк 2" рдЪреБрдиреЗ рдЬрд╛рдиреЗ рдкрд░ рдЯреВрдЯ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡реЗрдм рдШрдЯрдХреЛрдВ рдХрд╛ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рд░рд┐рдПрдХреНрдЯ рдореЗрдВ рдХрд┐рддрдирд╛ рдЖрдо рд╣реИ, рд▓реЗрдХрд┐рди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХреБрдЫ рдХреЛрдб рдмреЗрд╕ рд╣реИрдВ рдЬреЛ рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рдХрдо рдХреБрд╢рд▓ рд╣реИ рддреЛ рд░реЗрдлрд░реА рд▓реЗрдХрд┐рди рдЯрд░реНрд╕рд░ рднреА рд╣реИред

рдЕрдВрдд рдореЗрдВ, рд╡реЗрдм рдХрдВрдкреЛрдиреЗрдВрдЯ рдХрд╛ рд▓реЗрдЦрдХ рдПрдХ рд╣реА рдирд╛рдо рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдФрд░ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╢рдмреНрджрд╛рд░реНрде рд╕рдВрд▓рдЧреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдПрдХ рд╡реЗрдм рдШрдЯрдХ рд╣реЛрдЧрд╛ рдЬреЛ рдореВрд▓ input рддрддреНрд╡ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдирдХрд▓ рдХрд░рддрд╛ рд╣реИ - рд╡рд┐рд╢реЗрд╖рддрд╛ value рдХреЛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирддрд╛ рд╣реИ, рдФрд░ рдХреЗрд╡рд▓ рд╕рдВрдкрддреНрддрд┐ value рдкрд░рд┐рд╡рд░реНрддрди рджреЗрдЦрддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдШрдЯрдХреЛрдВ рдХреЛ рд╣реЗрдпреБрд░рд┐рд╕реНрдЯрд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдЬреЗрдПрд╕рдПрдХреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрд╛рддрдЪреАрдд рдирд╣реАрдВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рдФрд░ рдЕрдЧрд░ рдЗрд╕реЗ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рд╕реВрдХреНрд╖реНрдо рдЯреВрдЯрдирд╛ рдХрд╛ рдЕрдиреБрднрд╡ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдХрдо рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рд╣рдо рдЕрдХреЗрд▓реЗ рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдирдпрд╛ JSX рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкреЗрд╢ рдХрд░реЗрдВрдЧреЗред

рдирд╛рдорд╕реНрдерд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? https://github.com/facebook/jsx/issues/66 рдореЗрдВ react рдиреЗрдорд╕реНрдкреЗрд╕ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИ key рдФрд░ ref ред рдЙрд╕реА рдкрдВрдХреНрддрд┐ рдХреЗ рд╕рд╛рде, рдХреНрдпрд╛ react-dom рдЬреИрд╕рд╛ рдХреБрдЫ рдбреАрдУрдПрдо рдЧреБрдгреЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХреЗ рд▓рд┐рдП рдЯрдХрд╕рд╛рд▓ рдХреЗ рд▓рд┐рдП рдареАрдХ рдирд╛рдорд╕реНрдерд╛рди рд╣реЛрдЧрд╛? рдУрдкреА рдХреЗ рд╡рд┐рдХрд▓реНрдк 3 рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рд╡рд╣ рд╣реЛрдЧрд╛:

<custom-img react-dom:src="corgi.jpg" react-dom:hiResSrc="[email protected]" width="100%">

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

рдПрдХ _рдЕрдкреВрд░реНрдг рд╕рдорд╛рдзрд╛рди_

(рдкреНрд░реАрдПрдХреНрдЯ рдЕрднреА рднреА рдХреЗрд╡рд▓ рдорд╛рдиреНрдп рд╡реЗрдм рдШрдЯрдХреЛрдВ рдХреЗ рд╕рдмрд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдШреЛрд╖рдгрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдмрд╛рддрдЪреАрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ)

@brainlessbadger рдХреНрдпрд╛ рдЖрдк рдКрдкрд░ рдЕрдкрдиреА рдЯрд┐рдкреНрдкрдгреА рд╕рдВрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╕рдмрд╕реЗрдЯ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рд╣реИ? рдЙрджрд╛. рдХреМрди рд╕реЗ рд╡реЗрдм рдШрдЯрдХ/рдХрд╕реНрдЯрдо рддрддреНрд╡ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде)? рдФрд░ рд╡реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреИрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ?

@karlhorky рдореИрдВрдиреЗ рдПрдХ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдЬреЛрдбрд╝рд╛ред рдЕрдирд╛рд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рдЕрд╕реНрдкрд╖реНрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдХрд░реЗрдВред

рд╡реЗрдм рдШрдЯрдХ рдШрдЯрдирд╛рдУрдВ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВред рдХреНрдпрд╛ рдШрдЯрдирд╛рдУрдВ рдХреЗ рдирд╛рдореЛрдВ рдХреЛ рдЯрдХрд░рд╛рдиреЗ рд╕реЗ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЕрд╡рд░реЛрдз рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрднреА рддрдХ рдХреЛрдИ рд╕рд╣рдорддрд┐ рд╣реИ?

рдпрд╣ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдФрд░ рдЧреБрдгреЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрди рд╕рднреА рдХреА рддрд░рд╣ HTMLElement рдореЗрдВ рдирдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдЬреЛрдбрд╝реА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ: https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдЬреЛрдбрд╝реЗ рд╣реИрдВ рдирдП рдЬреЛрдбрд╝реЗ рдЧрдП рд╣реИрдВ рдЗрд╕рд▓рд┐рдП рдЕрднреА рднреА рдирдП рдЬреЛрдбрд╝реЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред

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

рдФрд░ рдХреБрдЫ рднреА рдПрдХ рд╕рдордЭреМрддрд╛ рд╣реИ рдЬреЛ рдЙрд╕ рдШрдЯрдХ рдХреЗ рдЬреЛрдЦрд┐рдореЛрдВ рдХреЛ рддреМрд▓рддрд╛ рд╣реИ рдЬреЛ рднрд╡рд┐рд╖реНрдп рдХреА рдХрд▓реНрдкрдирд╛ рдХреЛ рдПрдХ рдЕрдЪреНрдЫреЗ рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИред

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

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

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

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

рдХрд╕реНрдЯрдо рдПрд▓рд┐рдореЗрдВрдЯ рд╕реНрдкреЗрдХ рдореЗрдВ рдРрд╕реЗ рдкреНрд░рддрд┐рдмрдВрдз рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рд░рд┐рдПрдХреНрдЯ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╕реЗ рдЗрдВрдЯрд░рдСрдкрд░реЗрдмрд┐рд▓рд┐рдЯреА рдХрд╛рдлреА рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрдЧреАред

рдХрд╕реНрдЯрдо рддрддреНрд╡ рд▓реЗрдЦрдХреЛрдВ рд╕реЗ рдХрд┐рд╕реА рдврд╛рдВрдЪреЗ рдХреА рдордирдорд╛рдиреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдирд╣реАрдВ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред рдЕрд▓рдЧ-рдЕрд▓рдЧ рд░рд╛рдп рдФрд░ рд╕рдореНрдореЗрд▓рдиреЛрдВ рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╣рд░ рдврд╛рдВрдЪреЗ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВред рдпрд╣ рд╡реЗрдм рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдХреЛ рд╣рд░рд╛ рджреЗрддрд╛ рд╣реИред рдореИрдВ

рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рдврд╛рдВрдЪреЗ рдХреЛ рдорд╛рдирдХ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВред setAttribute() рдФрд░ dispatchEvent() рдХреЗрд╡рд▓ рдЧреИрд░-рд╡реЗрдм-рдШрдЯрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдПрдкреАрдЖрдИ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЕрдкрдиреА рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рдмрд╛рдж рд╕реЗ рдордирдорд╛рдиреЗ рдирд╛рдореЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреА рд╣реИред рдХрд┐рд╕реА рднреА рддрддреНрд╡ рдореЗрдВ рдХреЛрдИ рднреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ рдФрд░ рдХрд┐рд╕реА рднреА рдШрдЯрдирд╛ рдХреЛ рдЖрдЧ рд▓рдЧрд╛ рд╕рдХрддреА рд╣реИ - рдпрд╣ рд╕рд┐рд░реНрдл рдбреЛрдо рдХреА рдЬрдореАрдиреА рд╕рдЪреНрдЪрд╛рдИ рд╣реИред

рд╣рд╛рд▓рд╛рдВрдХрд┐ data- рдиреЗрдорд╕реНрдкреЗрд╕ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ред рдЖрдк рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдХреНрдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рд░реНрд╡реЛрддреНрддрдо рдЕрднреНрдпрд╛рд╕ рдХреНрдпрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рд╣реИред рдЖрдк рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЛ рднреА рдкреИрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЖрдкрдХреЛ рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рд╢рд╛рдорд┐рд▓/рд╢рд╛рдорд┐рд▓ рд╣реЛрддреА рд╣реИрдВред

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

рдореБрдЭреЗ рдПрд╕рдПрд╕рдЖрд░ рд╕реЗ рдЧреИрд░-рдмрд┐рд▓реНрдбрд┐рди рдХреЛ рдмрд╛рд╣рд░ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рд╣реИ рдФрд░ рд╣рд╛рдЗрдбреНрд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рдЧреБрдг рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдШреЛрд╖рдгрд╛рддреНрдордХ рдЫрд╛рдпрд╛ рдбреЛрдо рдХреЗ рд╕рд╛рде рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рд╛рдордЧреНрд░реА рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдареЛрд╕ рд░реВрдк рд╕реЗ рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдПрд╕рдПрд╕рдЖрд░ + рдПрдПрдордкреА рдХреЗ рд╕рд╛рде рд▓реЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдореМрдЬреВрджрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рдкреИрджрд╛ рд╣реЛрдЧреА рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдк рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдПрдПрдордкреА рд░рдирдЯрд╛рдЗрдо рдкрд╣рд▓реЗ рд╣реА рд▓реЛрдб рд╣реЛ рдЪреБрдХрд╛ рд╣реИред

рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рд╡рд┐рдХрд▓реНрдк 3 рдкрд░ рджрд░рд╡рд╛рдЬрд╛ рдмрдВрдж рдирд╣реАрдВ рд╣реИ, рд╡рд┐рдХрд▓реНрдк 2 рдкрд░ рдЗрд╕рдХрд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд▓рд╛рдн рд╣реИ, рдКрдкрд░ рджрд┐рдП рдЧрдП рд╡рд┐рдкрдХреНрд╖ рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдирд╣реАрдВ рд╣реИ - рд╡рд┐рдХрд▓реНрдк 2 рдХреЗ рд╕рд╛рде рдореБрдЭреЗ рдЬреЛ рд╕рдорд╕реНрдпрд╛ рдорд┐рд▓реА рд╣реИ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рд╡реЗрдм рдШрдЯрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд░реВрдк рд╕реЗ рд▓реЛрдб рдХрд┐рдпрд╛

рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЗрд╢рд╛рд░рд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рд░рд┐рдПрдХреНрдЯ рдЯреАрдо рдХреА рдУрд░ рд╕реЗ, рдПрд╕рдПрд╕рдЖрд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдЕрдиреНрдп рдврд╛рдВрдЪреЗ рдХрд╛ рд╕рдорд░реНрдерди (рдореЗрд░реА рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП) рдКрдкрд░ рдФрд░ рдЙрд╕рд╕реЗ рдЖрдЧреЗ рдЬрд╛рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рд╡рд╕реНрддреБ рдЧреБрдгреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЗрдЬрд╛рдЬрдд рджреЗрддрд╛ рд╣реИ, рдЬреЛ рд╕реЗрд╡рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмреЗрд╣рддрд░ред

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдореИрдВ рд╕реНрдкрд╖реНрдЯ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ рдпрд╛ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реЗрдм рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдЖрдо рд╕рд╣рдорддрд┐ рд╣реИ рдХрд┐ рдХреБрдЫ рдЧреБрдгреЛрдВ рдХреЗ рд▓рд┐рдП, рдХрднреА-рдХрднреА JSON рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдорд╛рди рд╕реЗрдЯ рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрддрд╛ рд╣реИ, рд╕рд┐рдВрдЧрд▓ рдХреЛрдЯреНрд╕ рдореЗрдВ рд▓рд┐рдкрдЯреЗред

рдПрдПрдордкреА рдПрдХ рдФрд░ рд╕рдореНрдореЗрд▓рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ - рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░рдХрд╛рд░ = рдПрдкреНрд▓рд┐рдХреЗрд╢рди.рдЬреЗрд╕рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рдЙрдЪрд┐рдд (рд▓реЗрдХрд┐рди рд╡рд░реНрдмреЛрдЬрд╝) рд╡рд┐рдХрд▓реНрдк рд╣реИред

рд▓реЗрдХрд┐рди рд╡рд┐рд╢реЗрд╖рддрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдЪрд┐рдкрдХреЗ рд░рд╣рдирд╛:

рд╡реЗрдм рдШрдЯрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рддрдм рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдХрд┐рд╕реА рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдореВрд▓реНрдп рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рддреЛ рд╣рд╛рдЗрдбреНрд░реЗрд╢рди рджреЗрд░реА рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд╕реЗрдЯ рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдЧрд╛:

<github-icon icon='{"name":"smiley"}'></github-icon>

рдПрд╕рдПрд╕рдЖрд░ рдХреЗ рджреМрд░рд╛рди рдлрд┐рд░ рдЬреАрдердм-рдЖрдЗрдХрди рддреБрд░рдВрдд рдЕрдкрдирд╛ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ JSON.parse рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП (рдЕрдзрд┐рдХ рдкреВрд░реНрдг?) рдСрдмреНрдЬреЗрдХреНрдЯ рд╡реИрд▓реНрдпреВ рдореЗрдВ рдкрд╛рд╕ рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдирд╣реАрдВ рдХрд░рдиреА рдкрдбрд╝рддреА рд╣реИред

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

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

рдпрджрд┐ рд╕рднреА рдЧреБрдгреЛрдВ рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдиреЗ рд░рд┐рдПрдХреНрдЯ рдЯреАрдо рдХреЗ рдкрд╕рдВрджреАрджрд╛ рдирд╛рдордХрд░рдг рд╕рдореНрдореЗрд▓рди (рд╢рд╛рдпрдж) рдХрд╛ рдкрд╛рд▓рди рдХрд┐рдпрд╛ - рд╕рднреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рдбреИрд╢ рдереЗ, рдФрд░ рд╕рднреА рдЧреБрдг рдХреИрдорд▓рдХреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдорд┐рд╢реНрд░рд┐рдд рдирд╛рдо рдереЗ, рд╢рд╛рдпрдж рдбреИрд╢ рдХрд╛ рдЕрд╕реНрддрд┐рддреНрд╡ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдФрд░ рдЧреБрдгреЛрдВ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ:

<github-icon my-icon={myStringifiedProperty} myIcon={myObjectProperty}></github-icon>

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

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗрд╡рд▓ рдпрд╣ рдорд╛рди рд╕рдХрддреА рд╣реИ рдХрд┐ рдпрджрд┐ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖рддрд╛/рд╕рдВрдкрддреНрддрд┐ рдХреБрдВрдЬреА рдКрдВрдЯ рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рд╣рдореЗрд╢рд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рдкрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ JSON-stringified рдХреНрд░рдордмрджреНрдзрддрд╛ рдпрджрд┐ рдпрд╣ рдПрд╕рдПрд╕рдЖрд░ рдХреЗ рджреМрд░рд╛рди рд╕реЗрдЯ рд╣реИред рдЗрд╕реА рддрд░рд╣, рдХреБрдВрдЬреА рдореЗрдВ рдбреИрд╢ (рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ) рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рдФрд░ рдмрд╕ рдорд╛рди рдХреЗ .toString() рдореЗрдВ рдкрд╛рд╕ рдХрд░реЗрдВред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдЬреНрдпрд╛рджрд╛ рдорд╛рдирддрд╛ рд╣реИред рдФрд░ рдПрдХрд▓ рд╢рдмреНрдж рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдФрд░ рдЧреБрдгреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рдирд╛, рдЬрд┐рд╕реЗ рдорд╛рдиреНрдп HTML рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрджрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ HTMLElement рдХреЛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡реЗрдм рдШрдЯрдХ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИрдВ, рддреЛ рдпрд╣ рдмрд╣реБрдд рд╕реАрдорд┐рдд рд╣реЛрдЧреАред рдореИрдВ W3C рдХреЗ "рдЖрд░рдХреНрд╖рд┐рдд" рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╛рдореЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд╣реВрдВ, рдЬреЛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЬреЗрдПрд╕ рдХреЗ рд▓рд┐рдП рдЖрд░рдХреНрд╖рд┐рдд рдХреБрдВрдЬреА рд╢рдмреНрджреЛрдВ рдХреЗ рд╕рдорд╛рди рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЕрдЧрд░ рд╡реЗ рдПрдХ рдЖрд░рдХреНрд╖рд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╛рдо рдХрд╛ рдЕрдиреБрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рддреЛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЪреЗрддрд╛рд╡рдиреА рджреЗрдиреЗ рдХреЗ рддрд░реАрдХреЗ рдЦреЛрдЬрдиреЗ рд╡рд╛рд▓реЗ рдврд╛рдВрдЪреЗред

рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдХрд▓реНрдк 3 рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдЧрд░ рдЗрд╕реЗ рдмреЗрд╣рддрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрднрд╡ рдХреЗ рд▓рд┐рдП @gaearon рджреНрд╡рд╛рд░рд╛ рд╕реБрдЭрд╛рдП рдЧрдП

рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реЛрдЧрд╛:

<github-icon icon={myDynamicIcon}/>

рдорддрд▓рдм рд╡рд┐рд╢реЗрд╖рддрд╛ (toString ())ред

<github-icon icon:={myDynamicIcon}/>

рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реЛрдЧрд╛ - рдПрд╕рдПрд╕рдЖрд░ рдХреЗ рджреМрд░рд╛рди, рдЕрдирджреЗрдЦрд╛ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░реЙрдкрд░реНрдЯреА (рд╣рд╛рдЗрдбреНрд░реЗрдЯрд┐рдВрдЧ рдХреЗ рдмрд╛рдж) рд╕реЗ рдмрд╛рдВрдзреЗрдВред

рдЕрдм рдкрд░рд┐рджреГрд╢реНрдп (рдХреБрдЫ?) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЯреАрдо рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ? рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рд╡рд┐рдЪрд╛рд░ рд╕рд┐рд░реНрдл рдХреБрдЫ рдЕрдиреНрдп рд╕рддрд░реНрдХ рдерд╛, рдЬреИрд╕реЗ рдХрд┐ рджреЛ рдХреЛрд▓рди:

<github-icon icon::={myDynamicIcon}/> //Not my final suggestion!

рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реЛрдЧрд╛, рдПрд╕рдПрд╕рдЖрд░ рдХреЗ рджреМрд░рд╛рди, JSON.stringify рд╕рдВрдкрддреНрддрд┐, рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП HTML рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд░реЗрдВ, рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░реЗрдВ рдЬрдм рд╕рдВрдкрддреНрддрд┐ рд╣рд╛рдЗрдбреНрд░реЗрд╢рди рдХреЗ рдмрд╛рдж рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдпрдХрд╛рд░реА рд╣реЛред

рдпрд╣ рдЬрдЯрд┐рд▓ рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ рдХреА рдореБрд╢реНрдХрд┐рд▓ рд╕реНрдерд┐рддрд┐ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред рдпрд╛рдиреА рдЕрдЧрд░ рд╣рдо рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ:

<github-icon iconProps::={myDynamicIconProp}/>  //Not my final suggestion!

рдпрд╣ рдЕрддреАрдд рдореЗрдВ рд╡рд┐рд╡рд╛рджрд╛рд╕реНрдкрдж рдирд╣реАрдВ рдерд╛ рдХрд┐ рд╕рдВрдкрддреНрддрд┐ рдирд╛рдо рдХреЗ рд▓рд┐рдП рд╕рдВрдмрдВрдзрд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛ рдЖрдЗрдХрдирдкреНрд░реЙрдкреНрд╕ рдЖрдЗрдХрди-рдкреНрд░реЙрдкреНрд╕ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╢рд╛рдпрдж рдпрд╣ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╡рд╛рджрд╛рд╕реНрдкрдж рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрди рд╡реЗрдм рдШрдЯрдХреЛрдВ рдореЗрдВ рд╕реЗ рдХреБрдЫ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рдбреИрд╢ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ (рд▓реЗрдХрд┐рди рдЧреБрдг рдХреИрдорд▓рдХреЗрд╕ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ)ред рдореЗрд░реЗ рдЬреНрдЮрд╛рди рдХреЗ рд▓рд┐рдП, рдЕрднреА рддрдХ рдПрдХ рдореВрд▓ рддрддреНрд╡ рдирд╣реАрдВ рд╣реИ рдЬреЛ JSON deserializing рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрдЯрд┐рд▓ рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рдЧреБрдЬрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ рддреЛ рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рддреЛ рд░рд┐рдПрдХреНрдЯ рдХреЛ рдХреИрд╕реЗ рдкрддрд╛ рдЪрд▓реЗрдЧрд╛ рдХрд┐ рдбреИрд╢ рдХрдм рдбрд╛рд▓рдирд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ?

рдПрдХрдорд╛рддреНрд░ (рдмрджрд╕реВрд░рдд?) рд╕реБрдЭрд╛рд╡ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдореИрдВ рдЖ рд╕рдХрддрд╛ рд╣реВрдВ рд╡рд╣ рд╣реИ:

<github-icon icon-props:iconProps={myDynamicIconProp}/>

рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ, рд╕рд░реНрд╡рд░ рдкрд░, рдХреНрд░рдордмрджреНрдз рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╡рд┐рд╢реЗрд╖рддрд╛ рдЖрдЗрдХрди-рдкреНрд░реЙрдкреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ iconProps, рд╕реАрдзреЗ рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рдЧреБрдЬрд░ рд░рд╣рд╛ рд╣реИред

рдЕрдзрд┐рдХ рд╡рд░реНрдмреЛрдЬрд╝ рдиреЛрдЯреЗрд╢рди рдХрд╛ рдПрдХ рдФрд░ (рд▓рдВрдмрд╛ рд╢реЙрдЯ?) рд╕рдВрднрд╛рд╡рд┐рдд рд▓рд╛рдн, рдПрдХ рд╕рдВрдХрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ / рд╕рдВрдкрддреНрддрд┐ рдЬреЛрдбрд╝реА рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдпрд╣ рд╣реИ: рдпрд╣ рдореВрд▓ рддрддреНрд╡ рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рдмрд╛рд░-рдмрд╛рд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рддреЗрдЬрд╝ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдмрдЬрд╛рдп, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХреЗ рд▓рд┐рдП рдЧреБрдг рдЬреЛ рддрд╛рд░ рдирд╣реАрдВ рд╣реИрдВред рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рдХреНрдпрд╛ рд░рд┐рдПрдХреНрдЯ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рд░реНрд╡рд░ рдкрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдЧреБрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ? рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдХреНрдпрд╛ рдпрд╣ рдЕрдиреБрд╡рд╛рдж рдХреА рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХреЗ рдирд╛рдордХрд░рдг рдХреЗ рдЙрд╕реА рдореБрджреНрджреЗ рдХреЗ рдХрд╛рд░рдг рд╣реИ, рдЬрд┐рд╕реЗ рдпрд╣ рд╕рдВрдХреЗрддрди рд╣рд▓ рдХрд░реЗрдЧрд╛?

@bahrus рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

<my-element attr='using-quotes' property={thisIsAnObject} />

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдПрдХ рдареЛрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

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

рд╕рдВрдмрдВрдзрд┐рдд рдЬреЗрдПрд╕ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдирд╛рдо рдпрд╛ рддреЛ рдПрдХ рдЕрдЪреНрдЫреЗ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдкреИрдЯрд░реНрди рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ - рдПрдХреНрд╕реЗрдкреНрдЯ рдЪрд╛рд░рд╕реЗрдЯ, рдиреЛ рд╡реИрд▓рд┐рдбреЗрдЯред рдиреЛрд╡реИрд▓рд┐рдбреЗрдЯ рдкреНрд░реЙрдкрд░реНрдЯреА / рдиреЛрд╡рд╛рд▓рд┐рдбреЗрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛ рдПрдХ рдмреВрд▓рд┐рдпрди рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░, myForm.setAttribute('novalidate', '') рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП myForm.noValidate = true рдХреЗ рд╡рд┐рдкрд░реАрдд myForm.setAttribute('novalidate', '') рдХрд░рдирд╛ рдмреЗрдХрд╛рд░ рд╣реЛрдЧрд╛ (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ)ред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╕рд░реНрд╡рд░ рдкрд░, myForm.noValidate = true рд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо DOM рдХрд╛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рднреЗрдЬрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

<form novalidate={shouldNotValidate}>

рдЕрд╕рд▓ рдореЗрдВ, рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд░рд┐рдПрдХреНрдЯ/рдЬреЗрдПрд╕рдПрдХреНрд╕ рдореЗрдВ рдПрдХ рдмреВрд▓рд┐рдпрди рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рд╕рд╢рд░реНрдд рд░реВрдк рд╕реЗ рдирд┐рд╢реНрдЪрд┐рдд, рд╕реНрдерд┐рд░ рд▓реБрдХрдЕрдк рдЯреЗрдмрд▓ рдкрд░, рдЬреЛ (?) рдЕрддреНрдпрдзрд┐рдХ рдХрдареЛрд░ рд▓рдЧрддрд╛ рд╣реИ ред рдЕрдЧрд░ рдореИрдВ рдЗрддрдирд╛ рдмреЛрд▓реНрдб рд╣реЛ рд╕рдХрддрд╛ рд╣реВрдВ, рддреЛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдФрд░ рдХреНрд╖реЗрддреНрд░ рд░рд┐рдПрдХреНрдЯ/рдЬреЗрдПрд╕рдПрдХреНрд╕ рдореЗрдВ рд╕реБрдзрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕ рдЖрд░рдПрдлрд╕реА рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдбреАрдУрдПрдо рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рд╕рд╛рде рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрдЧрдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП?

рд╣рдо рдЗрди рд╕рднреА рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рдбреЗрд╡рд▓рдкрд░ рдХрд╛ рд╕рд░реНрд╡рд░ (рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ (рдЧреБрдгреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рдкрд░ рдкреНрд░рджрд░реНрд╢рди рдХрд╛ рддреНрдпрд╛рдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдкреВрд░реНрдг рдирд┐рдпрдВрддреНрд░рдг рд╣реЛ? рдПрдХ рдмреВрд▓рд┐рдпрди рдЬреИрд╕реЗ рдиреЛрд╡рд╛рд▓рд┐рдбреЗрдЯ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВ рдкреНрд░рд╕реНрддрд╛рд╡ рджреВрдВрдЧрд╛:

<form novalidate:noValidate?={shouldNotValidate}/>

рдпрджрд┐ рд░рд┐рдПрдХреНрдЯ рдиреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдбреАрдУрдПрдо рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛, рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдЧрдиреНрджрд╛, рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХреЗ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рд▓рдВрдмрд╛ рд╕рдлрд░ рддрдп рдХрд░реЗрдЧрд╛, рдЬреЛ рд╢рд╛рдпрдж рдирд╛рдордХрд░рдг рдкреИрдЯрд░реНрди рдореЗрдВ рдмрд╣реБрдд рд╕реБрд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реИрдВред

рд╕рд░реНрд╡рд░ рдкрд░ JSON.stringify рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдЧреБрдгреЛрдВ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдирд╛, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдФрд░ рд╡реЗрдм рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдмрдбрд╝реА рдЬреАрдд рд╣реЛрдЧреА, рдРрд╕рд╛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИред

рдпрд╛ рдХреНрдпрд╛ рдореИрдВ рдХреБрдЫ рди рдХреБрдЫ рднреВрд▓ рд░рд╣рд╛ рд╣реВрдВ? ( @eavichay , рдЖрдк рдХреИрд╕реЗ рд╕реБрдЭрд╛рд╡ рджреЗрдВрдЧреЗ рдХрд┐ рдЗрди рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЕрдиреБрд╕рд░рдг рдирд╣реАрдВ)ред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

zpao picture zpao  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

DimitarChristoff picture DimitarChristoff  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jvorcak picture jvorcak  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

framerate picture framerate  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

UnbearableBear picture UnbearableBear  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ