React: createPortal: рд░рд┐рдПрдХреНрдЯ рдЯреНрд░реА рдореЗрдВ рдШрдЯрдирд╛рдУрдВ рдХреЗ рдкреНрд░рд╕рд╛рд░ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╡рд┐рдХрд▓реНрдк

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

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

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

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

DOM Feature Request

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

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

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

рд╕рд╛рде рд╣реА, рдорд╛рдЙрд╕рдУрд╡рд░/рдЫреБрдЯреНрдЯреА рдХрд╛ рдкреНрд░рдЪрд╛рд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рджрд┐рдЦрддрд╛ рд╣реИред
image

рдХреНрдпрд╛ рдЖрдк рдкреЛрд░реНрдЯрд▓ рдХреЛ рдмрдЯрди рдХреЗ рдмрд╛рд╣рд░ рд▓реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ?

рдЬреИрд╕реЗ

return [
  <div key="main">
    <p>Hello! This is first step.</p>
    <Button key="button" />
  </div>,
  <Portal key="portal" />
];

рддрдм рдпрд╣ рдмрдЯрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмреБрд▓рдмреБрд▓рд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рдпрд╣ рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рд╡рд┐рдЪрд╛рд░ рдерд╛, рд▓реЗрдХрд┐рди!) рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдРрд╕реЗ рдШрдЯрдХ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдорд╛рдЙрд╕ рдПрдВрдЯрд░ рд╣реИрдВрдбрд▓рд░ рд╣реИ:

image

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

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

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

@gaearon рдореИрдВ рд╕реБрдЭрд╛рд╡ unstable_rendersubtreeintocontainer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рдереЗ)ред рдЗрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреЛ рдорд╛рдЙрд╕ рдИрд╡реЗрдВрдЯ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд div рдкрд░рдд рдХреЗ рд╕рд╛рде рднреА рддрдп рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╣рдо рдбреНрд░реИрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╕рдВрд╡рд╛рджреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рддрдХ рдкреНрд░рдЪрд╛рд░рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ mousemove рдИрд╡реЗрдВрдЯ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВред

рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд░рд┐рд▓реАрдЬ рдореЗрдВ рдЗрд╕реЗ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ?

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

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

рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдЗрд░рд╛рджрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрдЧ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдХреНрд╖рдо-рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИред

рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рдбреАрдУрдПрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдбреАрдУрдПрдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕реЗ рддреЛрдбрд╝рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рд┐рдПред

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

class Container extends React.Component {
  shouldComponentUpdate = () => false;
  render = () => (
    <div
      ref={this.props.containerRef}
      // Event propagation on this element not working
      onMouseEnter={() => { console.log('handle mouse enter'); }}
      onClick={() => { console.log('handle click'); }}
    />
  )
}

class Root extends React.PureComponent {
  state = { container: null };
  handleContainer = (container) => { this.setState({ container }); }

  render = () => (
    <div>
      <div
        // Event propagation on this element not working also
        onMouseEnter={() => { console.log('handle mouse enter'); }}
        onClick={() => { console.log('handle click'); }}
      >
        <Container containerRef={this.handleContainer} />
      </div>
      {this.state.container && ReactDOM.createPortal(
        <div>Portal</div>,
        this.state.container
      )}
    </div>
  );
}

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

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

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

рдореИрдВ рдпрд╣ рднреА рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдбреАрдУрдПрдо рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдХрд╣рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдмрд╣реБрдд рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдбреЛрдо рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдбреАрдУрдПрдо рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╕реЗ рдЕрд▓рдЧ рд╣реИ, рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдШрдЯрдирд╛рдПрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореВрд▓ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдЕрд▓рдЧ рд╣реЛрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП onChange рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдореВрд▓ рдкрд░рд┐рд╡рд░реНрддрди рдШрдЯрдирд╛ рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣реИ, рдФрд░ DOM рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╕рднреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдБ рдкреНрд░рдХрд╛рд░ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ рдмрдмрд▓ рдХрд░рддреА рд╣реИрдВред

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

рдпрд╣рд╛рдВ рджреЛ рдЙрджрд╛рд╣рд░рдг рджрд┐рдП рдЧрдП рд╣реИрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд░рд┐рдПрдХреНрдЯ 16 рдореЗрдВ рдкреНрд░рд╡рд╛рд╕рди рдореЗрдВ рдЯреВрдЯ рдЧрдП рд╣реИрдВред

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

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

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

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

рдореИрдВ рдпрд╣ рднреА рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдбреАрдУрдПрдо рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдХрд╣рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдпрд╣рд╛рдВ рд╕реЗ рдХрд╣рд╛рдВ рдЖ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ (рдП) рдпрд╣ рдПрдХ рдореМрд▓рд┐рдХ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ рдЬрд┐рд╕рдХрд╛ (рдмреА) рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ "рдбреАрдУрдПрдо рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛" рдПрдХ рдордЬрдмреВрдд рддрд░реНрдХ рд╣реИ, рдЕрдЧрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЖрд╢реНрд╡рд╕реНрдд рдирд╣реАрдВ рд╣реИред

рдФрд░ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП: рдореЗрд░рд╛ рдЕрдиреБрд░реЛрдз рд╣реИ рдХрд┐ рдЗрд╕реЗ рдПрдХ рдмрдЧ рдорд╛рдирд╛ рдЬрд╛рдП, рддрд╛рдХрд┐ рдЗрд╕реЗ рдЬрд▓реНрдж рд╕реЗ рдЬрд▓реНрдж рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреА рдЬрд╛рдПред

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

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

рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╣рд╛рдБ GitHub рдкрд░ "рдЕрдкрдиреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЪреБрдиреЗрдВ" рд╕рдВрд╡рд╛рдж рд▓реЗрдВред рдЗрд╕реЗ рдмрдЯрди рдХреЗ рдареАрдХ рдмрдЧрд▓ рдореЗрдВ рдПрдХ div рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдЕрдм рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдЧрд░ рдпрд╣ рдПрдХ рдЕрд▓рдЧ z-index рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рдпрд╛ рдПрдХ overflow: scroll рдХреНрд╖реЗрддреНрд░ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдпреЗ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рд╣реИрдВ, рддреЛ рдЙрд╕реЗ DOM рд╕реНрдерд┐рддрд┐ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рддрдм рддрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдИрд╡реЗрдВрдЯ рдмрдмрд▓рд┐рдВрдЧ рдЬреИрд╕реА рдЕрдиреНрдп рдЪреАрдЬреЗрдВ рднреА рд╕рдВрд░рдХреНрд╖рд┐рдд рди рд╣реЛрдВред

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

рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рд╕реАрдзреЗ рдкреЛрд░реНрдЯрд▓ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЗ рддрд╣рдд stopPropagation рдХреЙрд▓ рдХрд░ рд░рд╣рд╛ рд╣реИ:

return createPortal(
      <div onClick={e => e.stopPropagation()}>{this.props.children}</div>,
      this.el
    )

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

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

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

@sebmarkbage рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд╡рд╛рд▓ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдЕрдЧрд░ рдореБрдЭреЗ рдШрдЯрдХ рдХреЛ рдЗрдирд▓рд╛рдЗрди рдХрд░рдиреЗ рдореЗрдВ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣реЛрддреА, рддреЛ рдореИрдВ рдЗрд╕реЗ рдЗрдирд▓рд╛рдЗрди рдирд╣реАрдВ рдХрд░рддрд╛ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдпрд╣рд╛рдБ рд╕реЗ рдХреБрдЫ рд╕реЗ рдХреБрдЫ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рд╣реИ renderSubtreeIntoContainer рдкрд░ рд╡рд╛рдкрд╕ рдкреЛрд░реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ createPortal рдЬрдм рджреЛ рддрд░реАрдХреЛрдВ рдзрд╛рд░рдгрд╛рддреНрдордХ рдЕрд▓рдЧ рдЕрд▓рдЧ рдмрд╛рддреЗрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреЛрд░реНрдЯрд▓ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рдЕрддрд┐рднрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рдерд╛ред

рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдореЛрдбрд▓ рд╕рдВрд╡рд╛рдж рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдк рд▓рдЧрднрдЧ рдХрднреА рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рдХрд┐ рдореЛрдбрд▓ рдЙрд╕ рдмрдЯрди рдХреЗ рдмрдЪреНрдЪреЗ рдХреА рддрд░рд╣ рдХрд╛рд░реНрдп рдХрд░реЗ рдЬрд┐рд╕рдиреЗ рдЗрд╕реЗ рдЦреЛрд▓рд╛ рдерд╛ред рдЯреНрд░рд┐рдЧрд░ рдШрдЯрдХ рдЗрд╕реЗ рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рдкреНрд░рд╕реНрддреБрдд рдХрд░ рд░рд╣рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ open рд╕реНрдерд┐рддрд┐ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╣рдирд╛ рдПрдХ рдЧрд▓рддреА рд╣реИ рдХрд┐ рдкреЛрд░реНрдЯрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд▓рдд рд╣реИ, рдпрд╣ рдХрд╣рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдХрд┐ рдмрдЯрди рдореЗрдВ createPortal рд▓рд┐рдП рд╕рд╣реА рдЙрдкрдХрд░рдг рдирд╣реАрдВ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдореЛрдбрд▓ рдЯреНрд░рд┐рдЧрд░ рдХрд╛ рдмрдЪреНрдЪрд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдкреНрд░рд╕реНрддреБрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ рдерд╛ред рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди renderSubtreeIntoContainer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрдирд╛ рд╣реИ, рджреВрд╕рд░рд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рднреВрдорд┐ рд╡рд┐рдХрд▓реНрдк рдРрдк рд░реВрдЯ рдХреЗ рдкрд╛рд╕ ModalProvider рдЬреЛ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдореЛрдбрд▓реНрд╕ рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ, рдФрд░ рдПрдХ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ (рд╕рдВрджрд░реНрдн рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ рдордирдорд╛рдирд╛ рдореЛрдбрд▓ рддрддреНрд╡ рдХреЛ рдЬрдбрд╝ рдХреА рдЬрд░реВрд░рдд рд╣реИ

renderSubtreeIntoContainer рдХреЛ рд░рд┐рдПрдХреНрдЯ 16 рдореЗрдВ render рдпрд╛ рдЬреАрд╡рдирдЪрдХреНрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдЕрдВрджрд░ рд╕реЗ рдирд╣реАрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдЙрди рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рд░реЛрдХрддрд╛ рд╣реИ рдЬрд┐рди рдкрд░ рдореИрдВ рдЪрд░реНрдЪрд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдорд╛рд░реЗ рд╕рднреА рдШрдЯрдХ рдЬреЛ рдереЗ рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ 16 рдХреЗ рдкреНрд░рд╡рд╛рд╕рди рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЯреВрдЯ рдЧрдпрд╛)ред рдкреЛрд░реНрдЯрд▓ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕рд┐рдлрд╛рд░рд┐рд╢ рд╣реИрдВ: https://reactjs.org/blog/2017/09/26/react-v16.0.html#break -changes

рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдкреЛрд░реНрдЯрд▓ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рд╢рд╛рдпрдж рдЕрддрд┐рднрд╛рд░рд┐рдд рд╣реЛ рдЧрдИ рд╣реИред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡реИрд╢реНрд╡рд┐рдХ рдШрдЯрдХ рдФрд░ рд╕рдВрджрд░реНрдн рдХрд╛ рд╕рдорд╛рдзрд╛рди рдкрд╕рдВрдж рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ createPortal рдкрд░ рдзреНрд╡рдЬ рджреНрд╡рд╛рд░рд╛ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдШрдЯрдирд╛рдУрдВ рдХреЛ рдмрдмрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдирд╣реАрдВред рдпрд╣ рдПрдХ рдСрдкреНрдЯ-рдЗрди рдлрд╝реНрд▓реИрдЧ рд╣реЛрдЧрд╛ рдЬреЛ 16+ рдХреЗ рд╕рд╛рде API рд╕рдВрдЧрддрддрд╛ рдмрдирд╛рдП рд░рдЦреЗрдЧрд╛ред

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

class RenderToLayer extends Component {
  ...
  stop = e => e.stopPropagation()

  render() {
    const { open, layerClassName, useLayerForClickAway, render: renderLayer } = this.props

    if (!open) { return null }

    return createPortal(
      <div
        ref={this.handleLayer}
        style={useLayerForClickAway ? clickAwayStyle : null}
        className={layerClassName}
        onClick={this.stop}
        onContextMenu={this.stop}
        onDoubleClick={this.stop}
        onDrag={this.stop}
        onDragEnd={this.stop}
        onDragEnter={this.stop}
        onDragExit={this.stop}
        onDragLeave={this.stop}
        onDragOver={this.stop}
        onDragStart={this.stop}
        onDrop={this.stop}
        onMouseDown={this.stop}
        onMouseEnter={this.stop}
        onMouseLeave={this.stop}
        onMouseMove={this.stop}
        onMouseOver={this.stop}
        onMouseOut={this.stop}
        onMouseUp={this.stop}

        onKeyDown={this.stop}
        onKeyPress={this.stop}
        onKeyUp={this.stop}

        onFocus={this.stop}
        onBlur={this.stop}

        onChange={this.stop}
        onInput={this.stop}
        onInvalid={this.stop}
        onSubmit={this.stop}
      >
        {renderLayer()}
      </div>, document.body)
  }
  ...
}

рдпрд╣ рдШрдЯрдХ рд░рд┐рдПрдХреНрдЯ рдбреЙрдХреНрд╕ рд╕реЗ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдИрд╡реЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕рд╛рд░ рдХреЛ рд░реЛрдХрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдиреЗ рд╣рдореЗрдВ рд░рд┐рдПрдХреНрдЯ 16 рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреАред

рдХреНрдпрд╛ рдЗрд╕реЗ рдкреЛрд░реНрдЯрд▓реЛрдВ рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рд╕реИрдВрдбрдмреЙрдХреНрд╕рд┐рдВрдЧ рдкреЛрд░реНрдЯрд▓ рдХреЗ рдмрдЬрд╛рдп, рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдХреЗрд╡рд▓ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП) <React.Sandbox>...</React.Sandbox> ?

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

@gaearon рдпрд╣ рд╣рдо рдореЗрдВ рд╕реЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЯреБрдХрдбрд╝реЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рд╣реА рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рд╕реНрдерд┐рддрд┐ рд╣реИ - рдХреНрдпрд╛ рдЖрдк рдпрд╛ рдЖрдкрдХрд╛ рдХреЛрдИ рдкреНрд░рд┐рдп рдЗрд╕ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓ рд╕рдХрддрд╛ рд╣реИ? :)

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

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

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

@kib357 рдкреЛрд╕реНрдЯ рдХрд┐рдП рдЧрдП рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╣рдореЗрдВ рдЕрдкрдиреЗ рдмрд╛рд╣рд░реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдлрд╝реЛрдХрд╕ рдкреНрд░рдмрдВрдзрди рдХреЛрдб рдореЗрдВ рдПрдХ рдЕрддреНрдпрдВрдд рдХрдард┐рди-рд╕реЗ-рдирд┐рджрд╛рди рдмрдЧ рдХреЛ рдареАрдХ рдХрд░рдирд╛ рдерд╛ред

рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ: рдкреЛрд░реНрдЯрд▓ рд╕реЗ рдмрд╛рд╣рд░ рдмреБрджрдмреБрджрд╛рдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдереЗрдЯрд┐рдХ рдлрд╝реЛрдХрд╕ рдИрд╡реЗрдВрдЯ рдкрд░ рд╕реНрдЯреЙрдкрдкреНрд░реЙрдкреИрдЧреЗрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рд╕реНрдЯреЙрдкрдкреНрд░реЙрдкреИрдЧреЗрд╢рди рдХреЛ #document рдкрд░ рд░рд┐рдПрдХреНрдЯ рдХреЗ рдХреИрдкреНрдЪрд░ рдХрд┐рдП рдЧрдП рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рдореВрд▓ рдлрд╝реЛрдХрд╕ рдИрд╡реЗрдВрдЯ рдкрд░ рднреА рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕реЗ <body> рдкрд░ рдХрд┐рд╕реА рдЕрдиреНрдп рдХреИрдкреНрдЪрд░ рдХрд┐рдП рдЧрдП рд╣реИрдВрдбрд▓рд░ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдмрдирд╛рддрд╛ рд╣реИред

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

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

рдЖрдк рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдкреЙрдкрдУрд╡рд░ рдХреЛ рдорд╛рдк рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рд╣реА рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рдЦрд╛рд▓реА рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рдбрд╛рд▓реЗрдВ рдФрд░ рдЗрд╕реЗ рд╢реАрд░реНрд╖ рдкрд░ рд╕рдВрд░реЗрдЦрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рд▓реЗрдХрд┐рди рд▓реЛрдЧ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рдпрд╣ рд╡рд╣ рдкреИрдЯрд░реНрди рд╣реИ рдЬреЛ рджреЛрдиреЛрдВ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

class Foo extends React.Component {
  state = {
    highlight: false,
    showFlyout: false,
  };

  mouseEnter() {
    this.setState({ highlight: true });
  }

  mouseLeave() {
    this.setState({ highlight: false });
  }

  showFlyout() {
    this.setState({ showFlyout: true });
  }

  hideFlyout() {
    this.setState({ showFlyout: false });
  }

  render() {
    return <>
      <div onMouseEnter={this.mouseEnter} onMouseLeave={this.mouseLeave} className={this.state.highlight ? 'highlight' : null}>
        Hello
        <Button onClick={this.showFlyout} />
      </div>
      {this.state.showFlyout ? <Flyout onHide={this.hideFlyout} /> : null}
    </>;
  }
}

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

рддреЛ рдЗрд╕ рдкреИрдЯрд░реНрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдРрд╕рд╛ рдХреНрдпрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ?

@sebmarkbage рд╣рдо рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдлреИрд╢рди рдореЗрдВ рдкреЛрд░реНрдЯрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдПрдХ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рдЬреЛ <body> рдХреЗ рдЕрдВрддрд┐рдо рдмрдЪреНрдЪреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдШреБрдбрд╝рд╕рд╡рд╛рд░ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдХрднреА-рдХрднреА рдЬреЗрдб-рдЗрдВрдбреЗрдХреНрд╕ рдХреЗ рд╕рд╛рде рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рд░рд┐рдПрдХреНрдЯ рдкреНрд░рд▓реЗрдЦрди рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рдЗрд░рд╛рджреЗ рдХреЗ рдХрд░реАрдм рд╣реИ; рдпрд╛рдиреА рдбреАрдУрдПрдо рдореЗрдВ рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдЬрдЧрд╣ рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ред рдореБрдЭреЗ рдРрд╕рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдЗрд╕ рдзрд╛рдЧреЗ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕рдорд╛рди рд╣реИрдВред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдПрдХ рд╕рд╛рде рд╡рд┐рдЪрд╛рд░-рдордВрдерди/рд╕рдорд╕реНрдпрд╛ рдирд┐рд╡рд╛рд░рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рдХрд┐рд╕реА рдЕрдиреНрдп рдордВрдЪ рдкрд░ рдЖрдЧреЗ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред

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

<Flyout /> рд╢рд░реАрд░ рдХреЗ рдЕрдВрддрд┐рдо рдмрдЪреНрдЪреЗ рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рдЪреБрди рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдЬрдм рддрдХ рдЖрдк рдкреЛрд░реНрдЯрд▓ рдХреЛ рдЙрд╕рдХреЗ рдмрдЪреНрдЪреЗ рдХреЗ рдмрдЬрд╛рдп рд╣реЛрд╡рд░ рдХрд┐рдП рдЧрдП рдШрдЯрдХ рдХреЗ рднрд╛рдИ рдХреЗ рд▓рд┐рдП рдлрд╣рд░рд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХрд╛ рдкрд░рд┐рджреГрд╢реНрдп рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

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

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЙрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрд▓реЙрдЯ рдПрдкреАрдЖрдИ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛред

class Foo extends React.Component {
  state = {
    showFlyout: false,
  };

  showFlyout() {
    this.setState({ showFlyout: true });
  }

  hideFlyout() {
    this.setState({ showFlyout: false });
  }

  render() {
    return <>
      Hello
      <Button onClick={this.showFlyout} />
      <SlotContent name="flyout">
        {this.state.showFlyout ? <Flyout onHide={this.hideFlyout} /> : null}
      </SlotContent>
    </>;
  }
}

class Bar extends React.Component {
  state = {
    highlight: false,
  };

  mouseEnter() {
    this.setState({ highlight: true });
  }

  mouseLeave() {
    this.setState({ highlight: false });
  }

  render() {
    return <>
      <div onMouseEnter={this.mouseEnter} onMouseLeave={this.mouseLeave} className={this.state.highlight ? 'highlight' : null}>
        <SomeContext>
          <DeepComponent />
        </SomeContext>
      </div>
      <Slot name="flyout" />
    </>;
  }
}

рддрдм рдкреЛрд░реНрдЯрд▓ рдХреЛ рдмрд╛рд░ рдХрд╛ рд╕рдВрджрд░реНрдн рдорд┐рд▓реЗрдЧрд╛, рдбреАрдкрдХрдВрдкреЛрдиреЗрдВрдЯ рдХрд╛ рдирд╣реАрдВред рдкреНрд░рд╕рдВрдЧ рдФрд░ рдИрд╡реЗрдВрдЯ рдмрдмрд▓рд┐рдВрдЧ рдлрд┐рд░ рднреА рд╡рд╣реА рдЯреНрд░реА рдкрде рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВред

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

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

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

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдЕрдиреБрд╕рд░рдг рдХрд░рддрд╛ рд╣реВрдВред рдПрдХ рдЕрдирдкреЗрдХреНрд╖рд┐рдд DOM рдЯреНрд░реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмреБрджрдмреБрджрд╛рддреЗ рд╣реБрдП keyDown рдИрд╡реЗрдВрдЯ рдХреА рд╕рдорд╕реНрдпрд╛ рдЕрднреА рднреА рд╣реИред

@jquense рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореЗрд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╕реНрд▓реЙрдЯ рдЕрднреА рднреА рдмрд╛рд░ рдШрдЯрдХ рдХреЗ рднреАрддрд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ <Form><Bar /></Form> рдЬреИрд╕реЗ рдлреЙрд░реНрдо рд╕реЗ рдЗрд╕рдХрд╛ рд╕рдВрджрд░реНрдн рдорд┐рд▓реЗрдЧрд╛ред

рднрд▓реЗ рд╣реА рдкреЛрд░реНрдЯрд▓ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рдореБрдЦреНрдп рднрд╛рдЧ рдореЗрдВ рд░реЗрдВрдбрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ.

рддреЛ рдпрд╣ рджреЛ рд╕рдВрдХреЗрддреЛрдВ (рдкреЛрд░реНрдЯрд▓рд┐рдВрдЧ) рдХреА рддрд░рд╣ рд╣реИ: рдЧрд╣рд░рд╛ -> рдмрд╛рд░ рдХрд╛ рд╕рд╣реЛрджрд░ -> рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдирд┐рдХрд╛рдпред

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

рд╣рд╛рдБ рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдЪреВрдХ рдЧрдП рдЕрдЧрд░ рдореИрдВ рдЗрд╕реЗ рдареАрдХ рд╕реЗ рдкрдврд╝ рд░рд╣рд╛ рд╣реВрдБ, рддреЛ рднреА рдЖрдк <Slot> рдКрдкрд░ рдмрдмрд▓рд┐рдВрдЧ рдХрд░реЗрдВрдЧреЗ? рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЙрдбрд▓ рд╕рдВрд╡рд╛рдж рдорд╛рдорд▓реЗ рдореЗрдВ рд╢рд╛рдпрдж рдХреЛрдИ _any_ рдмреБрд▓рдмреБрд▓рд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рд╣реИред рд╕реНрдХреНрд░реАрди рд░реАрдбрд░ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХреА рддрд░рд╣, рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдореЛрдбрд▓ рдХреЗ рдмрд╛рд╣рд░ рд╕рдм рдХреБрдЫ рдЙрд▓реНрдЯрд╛ рд╣реЛ, рдЬрдмрдХрд┐ рдпрд╣ рдКрдкрд░ рд╣реИред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдмреБрд▓рдмреБрд▓рд╛ рдПрдХ рдЧреЛрдЪрд╛ рд╣реИ, рдХреЛрдИ рднреА рдПрдХ рд╕рдВрд╡рд╛рдж рдХреЗ рдЕрдВрджрд░ рдПрдХ рдХреНрд▓рд┐рдХ рдХреЛ рдХрд╣реАрдВ рднреА рдмреБрд▓рдмреБрд▓рд╛ рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рд╕рдорд╕реНрдпрд╛ рдкреЛрд░реНрдЯрд▓ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдкреЗрдбрд╝реЛрдВ рдХреЗ рдмреАрдЪ рд╕рдВрджрд░реНрдн рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ? рд╕рдВрджрд░реНрдн рдЪреАрдЬрд╝ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ ReactDOM.render рдореЛрдбрд▓ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдареАрдХ рд╣реИ, рдФрд░ рд╢рд╛рдпрдж рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХрд╛ рдЕрдзрд┐рдХ "рд╕рд╣реА" рддрд░реАрдХрд╛ рд╣реИ ...

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

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

рдХреБрдЫ рдРрдкреНрд╕ рдореЗрдВ рдореЛрдбрд▓ рдореЗрдВ рдореЛрдбрд▓ рд╣реЛрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдлрдмреА рдореЗрдВ рдЪреИрдЯ рд╡рд┐рдВрдбреЛ рд╣реИ рдЬреЛ рдПрдХ рдореЛрдбрд▓ рд╕реЗ рдКрдкрд░ рд╣реЛ рд╕рдХрддреА рд╣реИ рдпрд╛ рдПрдХ рдореЛрдбрд▓ рдЪреИрдЯ рд╡рд┐рдВрдбреЛ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рддреЛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдПрдХ рдореЙрдбрд▓ рдХрд╛ рднреА рдХреБрдЫ рд╕рдВрджрд░реНрдн рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рд╡рд╣ рдкреЗрдбрд╝ рдореЗрдВ рдХрд╣рд╛рдВ рд╣реИред рдпрд╣ рдХрднреА рднреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

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

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

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрд╣ рдЖрдЬ рд╡рд┐рднрд┐рдиреНрди Redux рд╕рдВрджрд░реНрднреЛрдВ рдХреЗ рд╕рд╛рде рд╣реЛрддрд╛ рд╣реИред рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ this.context.dispatch("Hover") рдПрдХ рдпреВрдЬрд░ рд╕реНрдкреЗрд╕ рдЗрд╡реЗрдВрдЯ рдмрдмрд▓рд┐рдВрдЧ рд╣реИред рд╣рдо рд╕рдВрджрд░реНрдн рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рд░рд┐рдПрдХреНрдЯ рдШрдЯрдирд╛рдУрдВ рдХреЛ рднреА рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╕реЛрдЪрдирд╛ рдЙрдЪрд┐рдд рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдЙрд╕реА рддрд░рд╣ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдФрд░ рд╣рд░ рддрд░рд╣ рд╕реЗ рдЕрднреА, рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рд╣рдордиреЗ рдЗрди рджреЛ рд╕рдВрджрд░реНрднреЛрдВ рдХреЛ рдлреЛрд░реНрдХ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рд╣рдо рд╢рд╛рдпрдж рдПрдХ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрдкреЗрд╕ рд╕рдВрджрд░реНрдн рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрджрд░реНрдн рдХреЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдбреАрдУрдПрдо рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реИ - рдЕрдЧрд░ рд╡реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрддрдиреЗ рдЕрд▓рдЧ рд╣реИрдВред

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

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

. рд╣рдордиреЗ рдЕрдкрдиреЗ рд╣реИрдВрдбрд▓рд░ рдХреЛ #рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рддрдХ рд▓реЗ рдЬрд╛рдХрд░ рдареАрдХ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рд╣рдордиреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрддреАрдд рдореЗрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ рдкрд░рд╣реЗрдЬ рдХрд┐рдпрд╛ рдерд╛ рддрд╛рдХрд┐ рд░рд┐рдПрдХреНрдЯ рдХреЗ рдкреИрд░ рдХреА рдЙрдВрдЧрд▓рд┐рдпреЛрдВ рдкрд░ рдХрджрдо рди рд░рдЦреЗрдВред

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

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

рд╡рд┐рдЪрд╛рд░рд╛рдзреАрди рдХреЛрдб рдПрдХ рджреЗрд╢реА рдХреИрдкреНрдЪрд░ рдЗрд╡реЗрдВрдЯ рд╢реНрд░реЛрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд document.body.addEventListener('focus', handler, true)

@craigkovatch рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧрддрд╛ рд╣реИ, рдЗрд╕ рддрдереНрдп рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдЖрдкрдиреЗ рдХреИрдкреНрдЪрд░ рдХрд┐рдП рдЧрдП рд╣реИрдВрдбрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореБрдЭреЗ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реЛрддрд╛ рд╣реИред

рддреЛ, рджреЛрд╕реНрддреЛрдВ, рдкреЛрд░реНрдЯрд▓ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд░рд┐рджреГрд╢реНрдп рд╣реИрдВ:

  1. рд╕реАрдПрд╕рдПрд╕ рдореБрджреНрджреЛрдВ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдЬреИрд╕реЗ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣: рдЫреБрдкрд╛ рдФрд░ рдЖрджрд┐ рд╕рд╛рдзрд╛рд░рдг рд╡рд┐рдЬреЗрдЯреНрд╕ рдореЗрдВ, рдЬреИрд╕реЗ рдбреНрд░реЙрдкрдбрд╛рдЙрди рдмрдЯрди рдпрд╛ рдПрдХ-рд╕реНрддрд░реАрдп рдореЗрдиреВ
  2. рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдИ UX рдкрд░рдд рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреИрд╕реЗ:
  3. рдХреНрд░рд┐рдпрд╛рд░реНрде рджреНрдпреЛрддрдХ
  4. рдиреЗрд╕реНрдЯреЗрдб рдореЗрдиреВ
  5. рдкреЙрдкрдУрд╡рд░-рд╕рд╛рде-рдлреЙрд░реНрдо-рд╕рд╛рде-рдбреНрд░реЙрдкрдбрд╛рдЙрди-... - рд╕рднреА рдорд╛рдорд▓реЗ, рдЬрдм рдкрд░рддреЗрдВ рд╕рдВрдпреБрдХреНрдд рд╣реЛрддреА рд╣реИрдВ

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд░реНрддрдорд╛рди createPortal рдПрдкреАрдЖрдИ рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рдкрд░рд┐рджреГрд╢реНрдп рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИред рджреВрд╕рд░реЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдП React.render рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рдЕрдиреБрдкрдпреЛрдЧреА рд╣реИ - рдкреНрд░рддреНрдпреЗрдХ рдкрд░рдд рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреЗ рд╕рднреА рдкреНрд░рджрд╛рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрд▓рдЧ рдРрдк рдмрдирд╛рдирд╛ рдмрд╣реБрдд рдЦрд░рд╛рдм рд╣реИред
рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рд╣рдо рдХреМрди-рд╕реА рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
createPortal API рдореЗрдВ рд╕реБрдЭрд╛рдП рдЧрдП рдкрд░рдо рдХреЗ рдХреНрдпрд╛ рдиреБрдХрд╕рд╛рди рд╣реИрдВ?

@sebmarkbage рд╕реНрд▓реЙрдЯ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдореЗрд░рд╛ рддрддреНрдХрд╛рд▓ рдкреНрд░рд╢реНрди рд╣реИ: рдХреНрдпрд╛ рдореИрдВ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ SlotContents рдХреЛ рдПрдХ Slot рдореЗрдВ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░ рдкрд╛рдКрдВрдЧрд╛? рд╣рдорд╛рд░реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдПрдХ рд╕рд╛рде рдХрдИ "рдкреЙрдкрдЕрдк" рдпрд╛ "рдореЛрдбрд▓" рдЦреЛрд▓рдирд╛ рдЕрд╕рд╛рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реИред рдореЗрд░реА рд╕рдВрдкреВрд░реНрдг рджреБрдирд┐рдпрд╛ рдореЗрдВ Popup API рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:

import { App } from './app'
import { PopupSlot } from './popups'

let root = (
  <div>
    <App />
    <PopupSlot />
  </div>
)

ReactDOM.render(root, document.querySelector('#root'))

// some dark corner of our app

import { Popup } from './popups'

export function SoManyPopups () {
  return <>
    <Popup>My Entire</Popup>
    <Popup>Interface</Popup>
    <Popup>Is Popups</Popup>
  </>
}

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

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

рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕рдВрднрд╡рддрдГ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдпрд╣рд╛рдВ рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

const allTheEvents: string[] = 'click contextmenu doubleclick drag dragend dragenter dragexit dragleave dragover dragstart drop mousedown mouseenter mouseleave mousemove mouseover mouseout mouseup keydown keypress keyup focus blur change input invalid submit'.split(' ');
const stop = (e: React.SyntheticEvent<HTMLElement>): void => { e.stopPropagation(); };
const nativeStop = (e: Event): void => e.stopPropagation();
const handleRef = (ref: HTMLDivElement | null): void => {
  if (!ref) { return; }
  allTheEvents.forEach(eventName => ref.addEventListener(eventName, nativeStop));
};


/** Prevents https://reactjs.org/docs/portals.html#event-bubbling-through-portals */
export function PortalEventTrap(children: React.ReactNode): JSX.Element {
  return <div
      onClick={stop}
      ...

      ref={handleRef}
    >
      {children}
    </div>;
}

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

ReactDOM рдФрд░ JQuery рджреЛрдиреЛрдВ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдХреЗ рд╢реНрд░реЛрддрд╛ рдХреЛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рддрдм рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдмрдмрд▓рд┐рдВрдЧ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рддрд╛ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рдХреЛрдИ рдРрд╕реА рдШрдЯрдирд╛ рди рд╣реЛ рдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдмрдмрд▓ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдЬреИрд╕реЗ рдХрд┐ scroll ред

@ рдХреЛрд╡реЗрдиреНрд╕реНрдХреА рдореЗрд░реА рд╕рдордЭ рдпрд╣ рдереА рдХрд┐ jQuery рдиреЗ "рд╕рд┐рдВрдереЗрдЯрд┐рдХ

рдкреНрд░рддреНрдпрд╛рдпреЛрдЬрд┐рдд рдШрдЯрдирд╛рдУрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣реА рд╣реЛрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, $(document.body).on('click', '.my-selector', e => e.stopPropagation()) ред

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

@sebmarkbage рдЖрдкрдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗрд╡рд▓ рддрддреНрдХрд╛рд▓ рдорд╛рд▓рд┐рдХ рдХреЛ рдкреНрд░рдЪрд╛рд░рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рдШрдЯрдирд╛рдУрдВ рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред рдмрд╛рдХреА рдкреЗрдбрд╝ рдХрд╛ рдХреНрдпрд╛?

рдпрд╣рд╛рдБ рдПрдХ рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИ рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реНрд▓реЙрдЯ рдпрд╛ createPortal рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╣рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

<Form defaultValue={fromValue}>
   <more-fancy-markup />
   <div>
     <Field name="faz"/>
     <ComplexFieldModal>
       <Field name="foo.bar"/>
       <Field name="foo.baz"/>
     </ComplexFieldModal>
  </div>
</Form>

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

large gif 640x320

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

рддреБрд▓рдирд╛рддреНрдордХ рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рд╕реНрд▓реЙрдЯ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдПрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИрдВ:

  • рд╕рдорд╛рдзрд╛рди рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрджрд╛рдиреБрдХреНрд░рдо рдХреА рд╕реНрдерд┐рддрд┐ рддрдХ рдкрд╣реБрдВрдЪ рд╣реИ рдЬрд╣рд╛рдВ рдмрдмрд▓ рдШрдЯрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ "рдареАрдХ" рд╣реИред рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдШрдЯрдХреЛрдВ рдФрд░ рдШрдЯрдХ рдврд╛рдВрдЪреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИред
  • рдорд╛рди рд▓реЗрдВ рдХрд┐ рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЗ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕реНрддрд░ рдкрд░ рдШрдЯрдирд╛рдУрдВ рдХреЛ рдмрдмрд▓ рдХрд░рдирд╛ "рдареАрдХ" рд╣реИред
  • рдЗрд╡реЗрдВрдЯ рдЕрднреА рднреА рд╕реНрд▓реЙрдЯ рдХреА рд╕реНрдерд┐рддрд┐ рд╕реЗ рдКрдкрд░ рдЙрдареЗрдВрдЧреЗред (рдЬреИрд╕рд╛ рдХрд┐ @craigkovatch рдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ)

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЙрдкрдпреЛрдЧрдХреЗрд╕ рднреА рд╣реИ (рд╢рд╛рдпрдж рдкрд╣рд▓реЗ рд╕реЗ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рдорд╛рди)ред

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рддрд╣ рд╣реИ рдЬрд╣рд╛рдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдкрдиреЗ рдорд╛рдЙрд╕ рдХреЗ рд╕рд╛рде "рд▓рд╛рд╕реЛ" рдХреЗ рд╕рд╛рде рдЪреАрдЬреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ 100% рдЪреМрдбрд╝рд╛рдИ/рдКрдВрдЪрд╛рдИ рд╣реИ рдФрд░ рдореЗрд░реЗ рдРрдк рдХреА рдЬрдбрд╝ рдореЗрдВ рд╣реИ рдФрд░ onMouseDown рдИрд╡реЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЗрд╕ рд╕рддрд╣ рдореЗрдВ рдРрд╕реЗ рдмрдЯрди рднреА рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдореЛрдбрд▓ рдФрд░ рдбреНрд░реЙрдкрдбрд╛рдЙрди рдЬреИрд╕реЗ рдкреЛрд░реНрдЯрд▓ рдЦреЛрд▓рддреЗ рд╣реИрдВред рдкреЛрд░реНрдЯрд▓ рдХреЗ рдЕрдВрджрд░ рдПрдХ рдорд╛рдЙрд╕рдбрд╛рдЙрди рдШрдЯрдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрдк рдХреЗ рд░реВрдЯ рдкрд░ рд▓реИрд╕реНрд╕реЛ рдЪрдпрди рдШрдЯрдХ рджреНрд╡рд╛рд░рд╛ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХреА рдЬрд╛рддреА рд╣реИред

рдореИрдВ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рджреЗрдЦрддрд╛ рд╣реВрдВ:

  • рдкреЛрд░реНрдЯрд▓ рдХреЛ рд░реВрдЯ рд▓реИрд╕реНрд╕реЛ рдШрдЯрдХ рд╕реЗ рдПрдХ рдХрджрдо рдКрдкрд░ рдкреНрд░рд╕реНрддреБрдд рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИ рдФрд░ рд╢рд╛рдпрдж рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдЧреЗрдЯрд╡реЗ рдЬреИрд╕реЗ рд╕рдВрджрд░реНрдн-рдЖрдзрд╛рд░рд┐рдд lib рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓реЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА? (рдпрд╛ рд╢рд╛рдпрдж рд╕реНрд▓реЙрдЯ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред
  • рдкреЛрд░реНрдЯрд▓ рд░реВрдЯ рдХреЗ рдЕрдВрджрд░ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдкреНрд░рд╕рд╛рд░ рдХреЛ рд░реЛрдХреЗрдВ, рд▓реЗрдХрд┐рди рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдЕрд╡рд╛рдВрдЫрд┐рдд рджреБрд╖реНрдкреНрд░рднрд╛рд╡ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ
  • рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреЛрд░реНрдЯрд▓реЛрдВ рдореЗрдВ рдкреНрд░рд╕рд╛рд░ рдХреЛ рд░реЛрдХрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ (+1 btw)
  • рдкреЛрд░реНрдЯрд▓ рд╕реЗ рдЖрдиреЗ рдкрд░ рдИрд╡реЗрдВрдЯ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░реЗрдВ

рдЕрднреА рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рд╕рдорд╛рдзрд╛рди рдШрдЯрдирд╛рдУрдВ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдирд╛ рд╣реИред

const appRootNode = document.getElementById('root');

const isInPortal = element => isNodeInParent(element, appRootNode);


    handleMouseDown = e => {
      if (!isInPortal(e.target)) {
        return;
      }
      ...
    };

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

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

рд▓реЗрдХрд┐рди рдПрдХ рдФрд░ рдХрд╛рдВрдЯреЗрджрд╛рд░ рдореБрджреНрджрд╛ рдЬреЛ рдореИрдВ рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ onMouseEnter SyntheticEvent рд╣реИ, рдЬреЛ рдмреБрд▓рдмреБрд▓рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдмрд▓реНрдХрд┐ рдпрд╣ from рдШрдЯрдХ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдкреИрд░реЗрдВрдЯ рд╕реЗ to рдШрдЯрдХ рддрдХ рдЬрд╛рддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣рд╛рдВ рд╡рд░реНрдгрд┐рдд onMouseEnter рд╣реИрдВрдбрд▓рд░ рдХреЛ DOM рдХреЗ рдКрдкрд░ рд╕реЗ рдиреАрдЪреЗ createPortal рдореЗрдВ рдШрдЯрдХ рддрдХ рдЙрд╕реА рдХреНрд░рдо рдореЗрдВ рдЯреНрд░рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рд╕реЗ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА рдШрдЯрдирд╛рдУрдВ рдореЗрдВ рдЖрдЧ рд▓рдЧ рдЬрд╛рдПрдЧреАред unstable_renderSubtreeIntoContainer рд╕рд╛рде рдХрднреА рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдЪреВрдВрдХрд┐ onMouseEnter рдмреБрд▓рдмреБрд▓рд╛ рдирд╣реАрдВ рдмрдирддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдкреЛрд░реНрдЯрд▓ рд╕реНрддрд░ рдкрд░ рдЕрд╡рд░реБрджреНрдз рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред (рдпрд╣ unstable_renderSubtreeIntoContainer рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд▓рдЧрддреА рдереА рдХреНрдпреЛрдВрдХрд┐ onMouseEnter рдШрдЯрдирд╛ рдЖрднрд╛рд╕реА рдкрджрд╛рдиреБрдХреНрд░рдо рдХрд╛ рд╕рдореНрдорд╛рди рдирд╣реАрдВ рдХрд░рддреА рдереА рдФрд░ рд╢рд░реАрд░ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдиреБрдХреНрд░рдо рдирд╣реАрдВ рдХрд░рддреА рдереА, рдмрд▓реНрдХрд┐ рд╕реАрдзреЗ рдЙрдкрдЯреНрд░реА рдореЗрдВ рдЙрддрд░рддреА рдереАред)

рдпрджрд┐ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ onMouseEnter рдИрд╡реЗрдВрдЯ рдХреЛ DOM рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЗ рд╢реАрд░реНрд╖ рд╕реЗ рдкреНрд░рдЪрд╛рд░рд┐рдд рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдпрд╛ рд╕реАрдзреЗ рдкреЛрд░реНрдЯрд▓ рд╕рдмрдЯреНрд░реА рдореЗрдВ рдбрд╛рдпрд╡рд░реНрдЯ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдмрддрд╛рдПрдВред

@JasonGore рдореИрдВрдиреЗ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдкрд░ рднреА рдзреНрдпрд╛рди рджрд┐рдпрд╛ рд╣реИред

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

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рдВрджрд░реНрдн рдореЗрдиреВ рд╣реИ рдЬреЛ рддрдм рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдПрдХ div рдорд╛рдЙрд╕рдУрд╡рд░ рдкрд░ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдореЗрдиреВ рдореЗрдВ рдХрд┐рд╕реА рдПрдХ рдЖрдЗрдЯрдо рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ createPortal рдХреЗ рд╕рд╛рде рдПрдХ рдореЙрдбрд▓ рдЦреЛрд▓рддрд╛ рд╣реВрдВред рдЬрдм рдореИрдВ рдорд╛рдЙрд╕ рдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд┐рдВрдбреЛ рд╕реЗ рдмрд╛рд╣рд░ рд▓рд╛рддрд╛ рд╣реВрдВ, рддреЛ onMouseLeave рдИрд╡реЗрдВрдЯ рд╕рдВрджрд░реНрдн рдореЗрдиреВ рддрдХ рдлреИрд▓рддрд╛ рд╣реИ, рд╕рдВрджрд░реНрдн рдореЗрдиреВ (рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдореЙрдбрд▓) рдХреЛ рдмрдВрдж рдХрд░рддрд╛ рд╣реИ ...

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

screenshot 2018-10-31 at 11 42 47

рдореЗрд░рд╛ рдПрдХрдорд╛рддреНрд░ рд╕рдорд╛рдзрд╛рди рдореЛрдбрд▓ рдбрд┐рд╡ рдкрд░ рдмреБрджрдмреБрджрд╛рд╣рдЯ рдХреЛ рд░реЛрдХрдирд╛ рдерд╛ рдЬреИрд╕реЗ:

// components/Modal.js

onClick(e) {
    e.stopPropagation();
}

return createPortal(
        <div onClick={this.onClick} ...
            ...

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

рдХреНрдпрд╛ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рд╕рдВрднрд╛рд╡рд┐рдд рдореБрджреНрджреЗ рд╣реИрдВ?

@jnsandrew рдпрд╣ рди рднреВрд▓реЗрдВ рдХрд┐ ~ 50 рдЕрдиреНрдп рдИрд╡реЗрдВрдЯ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ рдЬреЛ рдмрдмрд▓

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

рдЗрд╕рдХреЗ рд▓рд┐рдП +1ред рд╣рдо iframe рдХреЗ рдЕрдВрджрд░ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП React.createPortal рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, (рд╢реИрд▓рд┐рдпреЛрдВ рдФрд░ рдИрд╡реЗрдВрдЯ рдЖрдЗрд╕реЛрд▓реЗрд╢рди рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП) рдФрд░ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдШрдЯрдирд╛рдУрдВ рдХреЛ рд░реЛрдХрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдирд╛ рдПрдХ рдмрд╣реБрдд рдмрдбрд╝реА рдмрд╛рдд рд╣реИред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд░рд┐рдПрдХреНрдЯ рдХреЗ рдмреИрдХрд▓реЙрдЧ рдореЗрдВ рдпрд╣ 12рд╡рд╛рдВ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдкрд╕рдВрдж рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдореБрджреНрджрд╛ рд╣реИред рдХрдо рд╕реЗ рдХрдо рдбреЙрдХреНрд╕ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЦреБрд▓реЗ рд╣реИрдВ https://reactjs.org/docs/portals.html#event -bubbling-through-portals - рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡реЗ рдбрд╛рдЙрдирд╕рд╛рдЗрдбреНрд╕ рдпрд╛ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдиреЛрдЯ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ "рдЕрдзрд┐рдХ рд▓рдЪреАрд▓реЗ рдПрдмреНрд╕реНрдЯреНрд░реИрдХреНрд╢рди" рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ ":

рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЛ рдХрдо рд╕реЗ рдХрдо рдпрд╣ рд╕рдордЭрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЗрд╕рд╕реЗ рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреИрджрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ рдФрд░ рдХрд╛рдордХрд╛рдЬ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ https://github.com/reactjs/react-modal рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИ: рдореЗрд░реЗ рдкрд╛рд╕ рдмрдЯрди рд╣реИрдВ рдЬреЛ рдбреНрд░реЙрдкрдбрд╛рдЙрди рдЬреИрд╕реА рдЪреАрдЬреЗрдВ рдЦреЛрд▓рддреЗ рд╣реИрдВ, рдФрд░ рдЗрдирдХреЗ рдЕрдВрджрд░ рдмрдЯрди рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдореЛрдбрд▓ рдмрдирд╛рддреЗ рд╣реИрдВред рдореЛрдбрд▓ рдмрдмрд▓ рдЕрдк рдЯреВ рдЯреЙрдк рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдирд╛, рдЬрд┐рд╕рд╕реЗ рдпрд╣ рдЕрд╡рд╛рдВрдЫрд┐рдд рд╕рд╛рдорд╛рди рдХрд░рддрд╛ рд╣реИред рдореЛрдбрд▓ рдХреЛ рдПрдХ рдХреЛрд╕рд┐рд╡ рдХрдВрдкреЛрдиреЗрдВрдЯ рдореЗрдВ рдПрдирдХреИрдкреНрд╕реБрд▓реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдкреЛрд░реНрдЯрд▓ рд╡рд╛рд▓реЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдиреЗ рд╕реЗ рдЙрд╕ рдПрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди рдХреЛ рддреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдПрдХ рд▓реАрдХреА рдПрдмреНрд╕реНрдЯреНрд░реИрдХреНрд╢рди рдмрди рдЬрд╛рддрд╛ рд╣реИред рдореЛрдбрд▓ рдЦреБрд▓рд╛ рд╣реЛрдиреЗ рдкрд░ рдЗрди рдмрдЯрдиреЛрдВ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣рд▓ рдлрд╝реНрд▓реИрдЧ рдлрд╝реНрд▓рд┐рдк рдХрд░рдирд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдореИрдВ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЙрдкрд░реЛрдХреНрдд рд╕реБрдЭрд╛рдП рдЧрдП рдкреНрд░рдЪрд╛рд░ рдХреЛ рднреА рд░реЛрдХ рд╕рдХрддрд╛ рд╣реВрдВ, рд╢рд╛рдпрдж рдореИрдВ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдмреБрджрдмреБрджрд╛рд╣рдЯ рдФрд░ рдХрдмреНрдЬрд╛ рдХрд┐рддрдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реИ (рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╣реБрдб рдХреЗ рдиреАрдЪреЗ рдмреБрджрдмреБрджрд╛рддреА рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИ) - рдЙрдирдХрд╛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдордВрдЬрд┐рд▓рд╛ рдЗрддрд┐рд╣рд╛рд╕ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдПрдХ рдХреЙрд▓рдмреИрдХ рдкрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдпрд╛ рдПрдХ рдЕрдзрд┐рдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдШрдЯрдирд╛ рдХрд╛ рдкреНрд░рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд░реЗрдбрдХреНрд╕ рдПрдХреНрд╢рди) рдмрдмрд▓ рдЕрдк рдпрд╛ рдХреИрдкреНрдЪрд░ рдбрд╛рдЙрди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдРрд╕реА рдЪреАрдЬреЗрдВ рд╢рд╛рдпрдж рдЕрдирд╛рд╡рд╢реНрдпрдХ рдмрд┐рдЪреМрд▓рд┐рдпреЛрдВ рдХреЗ рдПрдХ рд╕рдореВрд╣ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрддреА рд╣реИрдВред https://css-tricks.com/dangers-stopping-event-propagation/ рдЬреИрд╕реЗ рд▓реЗрдЦ рд╣реИрдВ рдФрд░ рдореИрдВ рдЙрди рдРрдкреНрд╕ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рд╢рд░реАрд░ рдХреЗ рдкреНрд░рд╕рд╛рд░ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВ, рдЬреНрдпрд╛рджрд╛рддрд░ "рдмрд╛рд╣рд░" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╕рдордп рдЪреАрдЬреЛрдВ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╣рд░ рдЪреАрдЬ рдкрд░ рдПрдХ рдЕрджреГрд╢реНрдп рдУрд╡рд░рд▓реЗ рд▓рдЧрд╛рдПрдВ рдФрд░ рдЙрд╕ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЙрд╕реЗ рдмрдВрдж рдХрд░ рджреЗрдВред рдмреЗрд╢рдХ, рдореИрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдЕрджреГрд╢реНрдп рдУрд╡рд░рд▓реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд┐рдПрдХреНрдЯ рдХреЗ рдкреЛрд░реНрдЯрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ ...

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

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

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

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдШрд░реНрд╖ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ onSubmit рдкреНрд░рдЪрд╛рд░ рдХрдм рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╣рдореЗрд╢рд╛ рдПрдХ рдлреАрдЪрд░ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдмрдЧ рдХреА рддрд░рд╣ рд╣реЛрдЧрд╛ред

рдбреЙрдХреНрд╕ рдкрд░
рдЬрдмрдХрд┐ рдкреЛрд░реНрдЯрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдИрд╡реЗрдВрдЯ рдмрдмрд▓рд┐рдВрдЧ рдПрдХ рдмреЗрд╣рддрд░реАрди рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рдХрднреА-рдХрднреА рдЖрдк рдХреБрдЫ рдИрд╡реЗрдВрдЯ рдкреНрд░рдЪрд╛рд░ рдХреЛ рд░реЛрдХрдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдк рдЗрд╕реЗ onSubmit={(e) => {e.stopPropagation()}} рдЬреЛрдбрд╝рдХрд░ рд╣рд╛рд╕рд┐рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

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

рдЖрдИрдПрдордУ, рдШрдЯрдирд╛-рдкреНрд░реЙрдХреНрд╕реА рд╡реНрдпрд╡рд╣рд╛рд░ рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ рдЯреВрдЯрд╛ рд╣реБрдЖ рд╣реИ (рдФрд░ рдореБрдЭреЗ рднреА рдмрдЧ рднреА рдкреИрджрд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ), рд▓реЗрдХрд┐рди рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╡рд┐рд╡рд╛рджрд╛рд╕реНрдкрдж рд╣реИред рдпрд╣ рдзрд╛рдЧрд╛ рдмрд╣реБрдд рджреГрдврд╝рддрд╛ рд╕реЗ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдРрд╕реЗ рдкреЛрд░реНрдЯрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рд╡рд░реНрдорд╣реЛрд▓ рд╕рдВрджрд░реНрдн рджреЗ рд▓реЗрдХрд┐рди рдШрдЯрдирд╛рдУрдВ рдХреЛ рдирд╣реАрдВред рдХреНрдпрд╛ рдХреЛрд░ рдЯреАрдо рд╕рд╣рдордд рд╣реИ? рдХрд┐рд╕реА рднреА рддрд░рд╣, рдпрд╣рд╛рдБ рдЕрдЧрд▓рд╛ рдХрджрдо рдХреНрдпрд╛ рд╣реИ?

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

рдореИрдВ рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдпрджрд┐ рдЖрдк рдкреЛрд░реНрдЯрд▓ рдХреЛ рддрддреНрд╡реЛрдВ рдХреЗ рдкреЗрдбрд╝ рдХреЗ рдкрд╛рд╕ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдкреНрд░рдЪрд╛рд░ рдХрд░реЗрдЧрд╛:

class SomeComponent extends React.Component<any, any> {
  render() {
    return <>
      <div className="some-tree">
        // Portal here will bubble events
      </div>
      // Portal here will also bubble events, just checked
    </>
  }
}

рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП +1

DOM рдореЗрдВ, рдИрд╡реЗрдВрдЯ DOM рдЯреНрд░реА рдХреЛ рдмрдмрд▓ рдХрд░рддреЗ рд╣реИрдВред рд░рд┐рдПрдХреНрдЯ рдореЗрдВ, рдЗрд╡реЗрдВрдЯ рдХрдВрдкреЛрдиреЗрдВрдЯ рдЯреНрд░реА рдХреЛ рдмрдмрд▓ рдХрд░рддреЗ рд╣реИрдВред

рдореИрдВ рдореМрдЬреВрджрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдкрд░ рдХрд╛рдлреА рд╣рдж рддрдХ рднрд░реЛрд╕рд╛ рдХрд░рддрд╛ рд╣реВрдВ, рдЬрд┐рд╕рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреЙрдкрдЖрдЙрдЯ рд╣реИ рдЬрд┐рд╕реЗ рдиреЗрд╕реНрдЯреЗрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ; рд╡реЗ рд╕рднреА overflow: hidden рд╕рд╛рде рдореБрджреНрджреЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдкреЛрд░реНрдЯрд▓ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкреЙрдкрдЖрдЙрдЯ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдкреЙрдкрдЖрдЙрдЯ рдШрдЯрдХ рдкрд░ рдмрд╛рд╣рд░реА рдХреНрд▓рд┐рдХ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдЬреЛ рдХрд┐ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдбреАрдУрдПрдо рддрддреНрд╡реЛрдВ рдХреЗ рдмрд╛рд╣рд░ рдХреНрд▓рд┐рдХ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рд╣реИ) . рдмреЗрд╣рддрд░ рдЙрджрд╛рд╣рд░рдг рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдордЬрдмреВрдд рдЪрд░реНрдЪрд╛ рдиреЗ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХрд░ рджрд┐рдпрд╛ рд╣реИ рдХрд┐ рджреЛрдиреЛрдВ рд╡реНрдпрд╡рд╣рд╛рд░реЛрдВ рдХреЗ рдЕрдЪреНрдЫреЗ рдХрд╛рд░рдг рд╣реИрдВред рдХреНрдпреЛрдВрдХрд┐ createPortal рдПрдХ "рд╕рд╛рджреЗ рдбреЛрдо" рдХрдВрдЯреЗрдирд░ рдиреЛрдб рдХреЗ рдЕрдВрджрд░ рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдШрдЯрдХ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИ, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рд░рд┐рдПрдХреНрдЯ рдХреА рд╕рд┐рдВрдереЗрдЯрд┐рдХ рдШрдЯрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЛрд░реНрдЯрд▓ рд╕реЗ рд╕рд╛рджреЗ-рдкреБрд░рд╛рдиреЗ-рдбреЛрдо рдкреЗрдбрд╝ рддрдХ рдкреНрд░рдЪрд╛рд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реЛрдЧрд╛ред

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

рдЕрдм рддрдХ рдХреА рд╕рднреА рдЪрд░реНрдЪрд╛рдУрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдореЗрд░рд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдкреНрд░рд╕реНрддрд╛рд╡ рддрдм (рдЕрднреА рднреА) рд╣реИ: рдкреЛрд░реНрдЯрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдзреНрд╡рдЬ рдЬреЛрдбрд╝реЗрдВ рдЬреЛ рдкреЛрд░реНрдЯрд▓ рд╕реАрдорд╛ рдХреЗ рдмрд╛рдж рдХрд┐рд╕реА рднреА рдШрдЯрдирд╛ рдХреЗ рдкреНрд░рд╕рд╛рд░ рдХреЛ рд░реЛрдХрддрд╛ рд╣реИред

рдХреБрдЫ рдФрд░ рдордЬрдмреВрдд рдШрдЯрдирд╛рдУрдВ рдХреА рдПрдХ рд╢реНрд╡реЗрддрд╕реВрдЪреА рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬрд┐рд╕реЗ рдмрд╛рдХреА рдХреЛ рд░реЛрдХрддреЗ рд╕рдордп рд╕реАрдорд╛ рдХреЛ "рдкреНрд░рд╣рд╛рд░" рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред

@gaearon рдХреНрдпрд╛ рд╣рдо рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рд╣реИрдВ рдХрд┐ рд░рд┐рдПрдХреНрдЯ рдЯреАрдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рд▓реЗ рд╕рдХрддреА рд╣реИ? рдпрд╣ рдПрдХ рд╢реАрд░реНрд╖ -10 рдореБрджреНрджрд╛ рд╣реИ рд▓реЗрдХрд┐рди рд╣рдордиреЗ рдХрд╛рдлреА рд╕рдордп рд╕реЗ рдЗрд╕ рдкрд░ рдЖрдкрд╕реЗ рдХреБрдЫ рдирд╣реАрдВ рд╕реБрдирд╛ рд╣реИред

рдореИрдВ рдЗрд╕рдореЗрдВ рдЕрдкрдирд╛ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдФрд░ рдкрд┐рдЫрд▓реЗ рд╕рд╛рд▓ рдХреА @sebmarkbage рдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рд╕реЗ рдЕрд╕рд╣рдордд

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

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

event.target === event.currentTarget рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдореЗрд░реА рдорджрдж рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд┐рд░рджрд░реНрдж рд╣реИред

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

рдЪреВрдВрдХрд┐ unstable_renderSubtreeIntoContainer рдХреЛ рдмрд╣рд┐рд╖реНрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ (?) рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рдорд╛рдзрд╛рди рдЖрд╡рд╢реНрдпрдХ рд╣реИ - рдКрдкрд░ рдкреНрд░рд╕реНрддреБрдд рдХреЛрдИ рднреА рд╕рдорд╛рдзрд╛рди рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рджреАрд░реНрдШрдХрд╛рд▓рд┐рдХ рд╕рдорд╛рдзрд╛рди рдкреНрд░рддреАрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

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

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

stopPropagation() рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб window рдкрд░ рдореВрд▓ рдИрд╡реЗрдВрдЯ рд╢реНрд░реЛрддрд╛рдУрдВ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ (рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ react-dnd-html5-backend рджреНрд╡рд╛рд░рд╛ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛)ред

рдпрд╣рд╛рдБ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдПрдХ рдиреНрдпреВрдирддрдо рд░реЗрдкреНрд░реЛ рд╣реИ: https://codepen.io/mogel/pen/xxKRPbQ

рдпрджрд┐ рдкреЛрд░реНрдЯрд▓ рдкрд░ рд╕рд┐рдВрдереЗрдЯрд┐рдХ рдмрдмрд▓рд┐рдВрдЧ рд╕реЗ рдмрдЪрдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╢рд╛рдпрдж рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдРрд╕рд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ рдЬреЛ рдореВрд▓ рдИрд╡реЗрдВрдЯ рдмрдмрд▓рд┐рдВрдЧ рдХреЛ рдирд╣реАрдВ рддреЛрдбрд╝рддрд╛ рд╣реИ?

рд╕реНрдЯреЙрдкрдкреНрд░реЙрдкреИрдЧреЗрд╢рди () рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рд╡рд┐рдВрдбреЛ рдкрд░ рджреЗрд╢реА рдИрд╡реЗрдВрдЯ рд╢реНрд░реЛрддрд╛рдУрдВ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИ

рд╕рд╣реАред :(

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

рдХреЛрд░ рдЯреАрдо рдХреА рдЪреБрдкреНрдкреА рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдореИрдВ, рдФрд░ рдЗрд╕ рд╕реВрддреНрд░ рдкрд░ рдХрдИ рдЕрдиреНрдп, _рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╢рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдРрд╕реА рдпреЛрдЬрдирд╛рдПрдВ рд╣реИрдВред

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

рдореЗрд░реА рдЯреАрдо рдиреЗ рдЗрд╕ рдЬреНрд╡рд▓рдВрдд рдореБрджреНрджреЗ рдХреЗ рдХрд╛рд░рдг рдкреЛрд░реНрдЯрд▓реЛрдВ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░ рджрд┐рдпрд╛ рд╣реИред рд╣рдо рдПрдХ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдПрдХ рд╣реБрдХ рдХреЗ рд╕рд╛рде рдкреИрди рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдРрдк рдХреЗ рдЕрдиреНрдп рд╕рдВрджрд░реНрднреЛрдВ рдореЗрдВ рд░рд╣рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рд░реВрдЯ рд╕реНрддрд░ рдХреЗ рд╕рдВрджрд░реНрдн рдореБрдлреНрдд рдореЗрдВ рдорд┐рд▓рддреЗ рд╣реИрдВ; рдХреЛрдИ рдЕрдиреНрдп рдЬрд┐рд╕реЗ рд╣рдо рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдкрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рдорд╣рд╛рди рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рд╡реНрдпрд░реНрде рд╡реНрд╣реЗрдХ-рдП-рдореЛрд▓ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рд╕реЗ рдмреЗрд╣рддрд░ред

рдХреЛрд░ рдЯреАрдо рдХреЗ рдХрд┐рд╕реА рд╡реНрдпрдХреНрддрд┐ рджреНрд╡рд╛рд░рд╛ рдЕрдВрддрд┐рдо рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджрд┐рдП рд╣реБрдП 17 рдорд╣реАрдиреЗ рд╣реЛ рдЪреБрдХреЗ рд╣реИрдВред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдкрд┐рдВрдЧ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХреБрдЫ рдзреНрдпрд╛рди рджреЗ :) @sebmarkbage рдпрд╛ @gaearon

рдореЗрд░реА рдЯреАрдо рдиреЗ рдЗрд╕ рдЬреНрд╡рд▓рдВрдд рдореБрджреНрджреЗ рдХреЗ рдХрд╛рд░рдг рдкреЛрд░реНрдЯрд▓реЛрдВ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░ рджрд┐рдпрд╛ рд╣реИред рд╣рдо рдПрдХ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдПрдХ рд╣реБрдХ рдХреЗ рд╕рд╛рде рдкреИрди рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдРрдк рдХреЗ рдЕрдиреНрдп рд╕рдВрджрд░реНрднреЛрдВ рдореЗрдВ рд░рд╣рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рд░реВрдЯ рд╕реНрддрд░ рдХреЗ рд╕рдВрджрд░реНрдн рдореБрдлреНрдд рдореЗрдВ рдорд┐рд▓рддреЗ рд╣реИрдВ; рдХреЛрдИ рдЕрдиреНрдп рдЬрд┐рд╕реЗ рд╣рдо рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдкрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рдорд╣рд╛рди рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рд╡реНрдпрд░реНрде рд╡реНрд╣реЗрдХ-рдП-рдореЛрд▓ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рд╕реЗ рдмреЗрд╣рддрд░ред

рдореИрдВ рдХреИрд╕реНрдХреЗрдбрд┐рдВрдЧ рдкреНрд░реЙрдкреНрд╕ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд┐рдП рдмрд┐рдирд╛ рдкреНрд░реЛрдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрджрд░реНрдн рдХреЛ "рдирдХрд▓реА рдкреЛрд░реНрдЯрд▓" рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рд╕рд╛рдорд╛рдиреНрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ :(

рдЕрдирдЧрд┐рдирдд рдмрдЧ рдереЗ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВрдиреЗ https://github.com/reakit/reakit рдкрд░ рдкрдХрдбрд╝рд╛ рдерд╛ рдЬреЛ рдЗрд╕ рдореБрджреНрджреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдереЗред рдореИрдВ рд░рд┐рдПрдХреНрдЯ рдкреЛрд░реНрдЯрд▓ рдХрд╛ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдореИрдВ рдПрдХ рднреА рдорд╛рдорд▓реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рдЬрд╣рд╛рдВ рдореИрдВ рдкреЛрд░реНрдЯрд▓ рд╕реЗ рдЙрдирдХреЗ рдореВрд▓ рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдмрдмрд▓рд┐рдВрдЧ рдЗрд╡реЗрдВрдЯ рдЪрд╛рд╣рддрд╛ рдерд╛ред

рдореЗрд░рд╛ рдХрд╛рдордХрд╛рдЬ рдпрд╛ рддреЛ рдореЗрд░реЗ рдореВрд▓ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЗ рдЕрдВрджрд░ рдЗрд╕рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд░рд╣рд╛ рд╣реИ:

event.currentTarget.contains(event.target);

рдпрд╛ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдореВрд▓ рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛:

const onClick = () => {};
React.useEffect(() => {
  ref.current.addEventListener("click", onClick);
  return () => ref.current.removeEventListener("click", onClick);
});

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

рдИрд╡реЗрдВрдЯ рдмрдмрд▓рд┐рдВрдЧ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдЙрди рд╕рднреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░реЗрдЧрд╛ред

рдореИрдВрдиреЗ рдПрдХ рд╕рд╛рде рдЕрд░реНрдз-рд╕рдорд╛рдзрд╛рди рд╣реИрдХ рдХрд┐рдпрд╛ рдЬреЛ window рдкрд░ рдШрдЯрдирд╛ рдХреЗ рдХреНрд▓реЛрди рдХреЛ рдкреБрди: рдЯреНрд░рд┐рдЧрд░ рдХрд░рддреЗ рд╕рдордп рд░рд┐рдПрдХреНрдЯ рдмрдмрд▓рд┐рдВрдЧ рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд░рддрд╛ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ OSX рдкрд░ рдХреНрд░реЛрдо, рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдФрд░ рд╕рдлрд╛рд░реА рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди event.target рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдиреЗ рдХреЗ рдХрд╛рд░рдг IE11 рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрдм рддрдХ рдпрд╣ рдХреЗрд╡рд▓ рдорд╛рдЙрд╕, рдкреЙрдЗрдВрдЯрд░, рдХреАрдмреЛрд░реНрдб рдФрд░ рд╡реНрд╣реАрд▓ рдЗрд╡реЗрдВрдЯреНрд╕ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИред рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдбреНрд░реИрдЧ рдЗрд╡реЗрдВрдЯ рдХреНрд▓реЛрди рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ рдпрд╛ рдирд╣реАрдВред

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

рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рджрд┐рдорд╛рдЧреА рджрдмрджрдмрд╛ рдмрдирд╛рддрд╛ рд╣реИ, рдпрд╣ рд╣реИ рдХрд┐ 'рдбрд┐рдлрд╝реЙрд▓реНрдЯ' рд╡реНрдпрд╡рд╣рд╛рд░ рдмреБрд▓рдмреБрд▓реЗ _down_ рдШрдЯрдХ рдкреЗрдбрд╝ рдлрд┐рд░ рд╕реЗред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреЗрдбрд╝ рд▓реЗрдВ:

<Link>
   <Menu (portal)>
      <form onSubmit={...}>
         <button type="submit">

рдореИрдВ рдШрдВрдЯреЛрдВ рд╕реЗ рдЕрдкрдиреЗ рдмрд╛рд▓реЛрдВ рдХреЛ рдЦреАрдВрдЪ рд░рд╣рд╛ рд╣реВрдВ, рдХрд┐ рдШрдЯрдХреЛрдВ рдХреЗ рдЗрд╕ рд╕рдЯреАрдХ рд╕рдВрдпреЛрдЬрди рдХреЗ рд╕рд╛рде рдореЗрд░реЗ рдлреЙрд░реНрдо рдХрд╛ onSubmit рдХрднреА рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ - рднрд▓реЗ рд╣реА рдореИрдВ рд╕рдмрдорд┐рдЯ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реВрдВ рдпрд╛ рдлреЙрд░реНрдо рдХреЗ рдЕрдВрджрд░ рдЗрдирдкреБрдЯ рдлрд╝реАрд▓реНрдб рдореЗрдВ рдПрдВрдЯрд░ рджрдмрд╛рддрд╛ рд╣реВрдВред

рдЕрдВрдд рдореЗрдВ, рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдпрд╣ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд░рд┐рдПрдХреНрдЯ рд░рд╛рдЙрдЯрд░ Link рдШрдЯрдХ рдореЗрдВ onClick рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ рдЬреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдкреБрдирдГ рд▓реЛрдб рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП e.preventDefault() рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рд╕рдмрдорд┐рдЯ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд░рдиреЗ рдХрд╛ рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рджреБрд╖реНрдкреНрд░рднрд╛рд╡ рд╣реИ, рдЬреЛ рдлрд╝реЙрд░реНрдо рд╕рдмрдорд┐рдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИред рддреЛ рдЖрдЬ рдореИрдВрдиреЗ рдЬреЛ рд╕реАрдЦрд╛ рд╡рд╣ рд╣реИ рдСрдирд╕рдмрдорд┐рдЯ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рд╕рдмрдорд┐рдЯ рдмрдЯрди рджрдмрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреНрд░рд┐рдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдЬрдм рдЖрдк рдПрдВрдЯрд░ рджрдмрд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕рдмрдорд┐рдЯ рдмрдЯрди рдкрд░ рдПрдХ рдХреНрд▓рд┐рдХ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдлреЙрд░реНрдо рд╕рдмрдорд┐рдЯ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рдЖрдк рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреИрд╕реЗ рдИрд╡реЗрдВрдЯ рдмрдмрд▓рд┐рдВрдЧ рдСрд░реНрдбрд░ рдЗрд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЬреАрдм рдмрдирд╛рддрд╛ рд╣реИред

  1. <input> [рдХреАрдкреНрд░реЗрд╕ рдПрдВрдЯрд░]
  2. <button type="submit"> [рдирдХрд▓реА рдХреНрд▓рд┐рдХ]
  3. <Menu> [рдИрд╡реЗрдВрдЯ рдкреЛрд░реНрдЯрд▓ рдХреЗ рдмрд╛рд╣рд░ рдкреНрд░рдЪрд╛рд░рд┐рдд]
  4. <Link> [рдкреНрд░рдЪрд╛рд░ рдорд╛рддрд╛-рдкрд┐рддрд╛ рддрдХ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИ Link ]
  5. <Link> [рдХреЙрд▓ e.preventDefault() ]
  6. => рдмрдЯрди рдХреНрд▓рд┐рдХ рд╕рдмрдорд┐рдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд░рджреНрдж рдХрд░ рджреА рдЧрдИ рд╣реИ
  7. => рдлреЙрд░реНрдо рдЬрдорд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ

рдРрд╕рд╛ рддрдм рднреА рд╣реЛрддрд╛ рд╣реИ рдЬрдм рд╣рдо рдкрд╣рд▓реЗ рд╣реА DOM рдореЗрдВ рдмрдЯрди рдФрд░ рдлреЙрд░реНрдо рдкрд╛рд╕ рдХрд░ рдЪреБрдХреЗ рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ Link рдХрд╛ рдЗрд╕рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдмреНрд▓реЙрдХ рдХрд░рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рдирд╣реАрдВ рд╣реИред

рдореЗрд░реЗ рд▓рд┐рдП рд╕рдорд╛рдзрд╛рди (рдпрджрд┐ рдХреЛрдИ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рдЪрд▓рддрд╛ рд╣реИ) <Menu> рд╕рд╛рдордЧреНрд░реА рдХреЛ onClick={e => e.stopPropagation()} рд╕рд╛рде рдПрдХ div рдореЗрдВ рд▓рдкреЗрдЯрдиреЗ рдХрд╛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рд╕рдорд╛рдзрд╛рди рдерд╛ред рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рдЧрдВрд╡рд╛ рджрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╡реНрдпрд╡рд╣рд╛рд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдирдЬрд╛рди рд╣реИред

рдореЗрд░реЗ рд▓рд┐рдП рд╕рдорд╛рдзрд╛рди (рдпрджрд┐ рдХреЛрдИ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рдЪрд▓рддрд╛ рд╣реИ) <Menu> рд╕рд╛рдордЧреНрд░реА рдХреЛ onClick={e => e.stopPropagation()} рд╕рд╛рде рдПрдХ div рдореЗрдВ рд▓рдкреЗрдЯрдиреЗ рдХрд╛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рд╕рдорд╛рдзрд╛рди рдерд╛ред рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рдЧрдВрд╡рд╛ рджрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╡реНрдпрд╡рд╣рд╛рд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдирдЬрд╛рди рд╣реИред

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

рдореИрдВрдиреЗ рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдбреАрдмрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реБрдП рдХрдИ рджрд┐рди рдмрд┐рддрд╛рдП рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ mouseenter рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд░реВрдк рд╕реЗ рдкреЛрд░реНрдЯрд▓реНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдЖ рд░рд╣рд╛ рд╣реИред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдкреЛрд░реНрдЯрд▓ рдХреЗ рдбрд┐рд╡ рдкрд░ onMouseEnter={e => e.stopPropagation()} , рдИрд╡реЗрдВрдЯ рдЕрднреА рднреА рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рд╡рд╛рд▓реЗ рдмрдЯрди рдХреЗ рд▓рд┐рдП рдмреБрджрдмреБрджрд╛ рд░рд╣реЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ https://github.com/facebook/react/issues/11387#issuecomment -340009465 (рдкрд╣рд▓рд╛) рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЯрд┐рдкреНрдкрдгреА)ред mouseenter / mouseleave рдкрд╣рд▓реЗ рд╕реНрдерд╛рди рдкрд░ рдмреБрд▓рдмреБрд▓рд╛ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП ...

рд╢рд╛рдпрдж рдЕрдЬрдирдмреА рднреА, рдЬрдм рдореИрдВ рдПрдХ рдкреЛрд░реНрдЯрд▓ рд╕реЗ рдПрдХ рдмрдЯрди рдкрд░ mouseenter рд╕рд┐рдВрдереЗрдЯрд┐рдХ рдИрд╡реЗрдВрдЯ рдмрдмрд▓ рджреЗрдЦрддрд╛ рд╣реВрдВ, рддреЛ e.nativeEvent.type mouseout ред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдПрдХ рдмреБрджрдмреБрджрд╛рддреА рдореВрд▓ рдШрдЯрдирд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдЧреИрд░-рдмреБрджрдмреБрджрд╛рддреА рд╕рд┐рдВрдереЗрдЯрд┐рдХ рдШрдЯрдирд╛ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░ рд░рд╣реА рд╣реИ - рдФрд░ рд╕рд┐рдВрдереЗрдЯрд┐рдХ рдШрдЯрдирд╛ рдкрд░ stopPropagation рдХрд╣реЗ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрджред

@gaearon @trueadm рдЗрд╕ рдореБрджреНрджреЗ рдиреЗ рджреЛ рд╡рд░реНрд╖реЛрдВ рд╕реЗ рд▓рдЧрд╛рддрд╛рд░, рднрд╛рд░реА рдирд┐рд░рд╛рд╢рд╛ рдкреИрджрд╛ рдХреА рд╣реИред рдпрд╣ рдзрд╛рдЧрд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкрд░ рд╢реАрд░реНрд╖ рд╕рдХреНрд░рд┐рдп рдореБрджреНрджреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдХреГрдкрдпрд╛ , рдХреНрдпрд╛ рдЯреАрдо рдХрд╛ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдпрд╣рд╛рдВ рдпреЛрдЧрджрд╛рди рджреЗ рд╕рдХрддрд╛ рд╣реИ ?

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

рдореИрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдирдпрд╛ рд╣реВрдВ, рдореИрдВ рдЬреНрдпрд╛рджрд╛рддрд░ рдПрдХ jQuery рдФрд░ рд╡реЗрдирд┐рд▓рд╛ рдЬреЗрдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдпрд╣ рджрд┐рдорд╛рдЧ рдЙрдбрд╝рд╛рдиреЗ рд╡рд╛рд▓рд╛ рдмрдЧ рд╣реИред рдРрд╕реЗ 1% рдорд╛рдорд▓реЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХреА рдЬрд╛рдПрдЧреА ...

рдореБрдЭреЗ @diegohaz рд╕реЗ рджреЛ рд╕рдорд╛рдзрд╛рди рдкрд╕рдВрдж рд╣реИрдВ , рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЕрднреА рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ createPortal рдИрд╡реЗрдВрдЯ рдмрдмрд▓рд┐рдВрдЧ рдХреЛ рд░реЛрдХрдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

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

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

рдЕрдВрдд рдореЗрдВ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ ReactDOM.unstable_renderSubtreeIntoContainer рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ , рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдП рдЬрд▓реНрдж рд╣реА рдХреЛрдИ рдЙрдЪрд┐рдд рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдмрдЪреЗрдЧрд╛...

^ рд╣рдорд╛рд░реА рдорджрдж рдХрд░реЗрдВ @trueadm -nobi рдЖрдк рд╣реА рд╣рдорд╛рд░реА рдПрдХрдорд╛рддреНрд░ рдЙрдореНрдореАрдж рд╣реИрдВ

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ GitHub рдкрд░ рдкрд┐рдВрдЧ рдХрд░рдиреЗ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдЪрд▓рддрд╛
рд╢рд╛рдпрдж рдПрдХ рд╕рдХреНрд░рд┐рдп рдЯреНрд╡рд┐рдЯрд░ рдЕрдХрд╛рдЙрдВрдЯ рд╡рд╛рд▓рд╛ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЯреНрд╡реАрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдпреЛрдЧрджрд╛рдирдХрд░реНрддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдЯреИрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ +1 рдЬреЛрдбрд╝рдирд╛ред рдиреЛрдЯрд┐рдпрди рдореЗрдВ, рд╣рдо рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдПрдХ рдХрд╕реНрдЯрдо рдкреЛрд░реНрдЯрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ React.createPortal , рдФрд░ рд╣рдо рдЕрдкрдиреЗ рд╕рдВрджрд░реНрдн рдкреНрд░рджрд╛рддрд╛рдУрдВ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдирдП рдЯреНрд░реА рдкрд░ рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдореИрдВрдиреЗ React.createPortal рдЕрдкрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд▓реЗрдХрд┐рди рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдмреБрджрдмреБрджрд╛рддреА рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реЗ рдЕрд╡рд░реБрджреНрдз рд╣реЛ рдЧрдпрд╛:

@sebmarkbage рдХрд╛ <Portal> рдХреЛ <MenuItem> рдШрдЯрдХ рдХреЗ рдмрд╛рд╣рд░ рд▓реЗ рдЬрд╛рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рдХреЗрд╡рд▓ рдиреЗрд╕реНрдЯрд┐рдВрдЧ рд╕реНрддрд░ рдХреЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рддрд╛ рд╣реИред рд╕рдорд╕реНрдпрд╛ рдмрдиреА рд░рд╣рддреА рд╣реИ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХрд╛рдзрд┐рдХ рдиреЗрд╕реНрдЯреЗрдб (рдЙрджрд╛рд╣рд░рдг) рдореЗрдиреВ рдЖрдЗрдЯрдо рд╣реИрдВ рдЬреЛ рдЙрдк-рдореЗрдиреВ рдХреЛ рдкреЛрд░реНрдЯрд▓ рд╕реЗ рдмрд╛рд╣рд░ рдХрд░рддреЗ рд╣реИрдВред

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

рдЯрдХреНрдХрд░ред

рдбреИрди рдиреЗ рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЗ рдкрд░ рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЫреЛрдбрд╝реА:

@mogelbrod рдореЗрд░реЗ рдкрд╛рд╕ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЙрд╕рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдХреБрдЫ ( #11387 (рдЯрд┐рдкреНрдкрдгреА) ) рдореБрдЭреЗ рдЙрдЪрд┐рдд рд▓рдЧрддрд╛ рд╣реИ рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдореМрдЬреВрджрд╛ рдШрдЯрдХ рдХреЛ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдЗрд╕реА рдЕрдВрдХ рдореЗрдВ рдбреИрди рджреНрд╡рд╛рд░рд╛ рдлреЙрд▓реЛрдЕрдк :

рдХрд╛рдордХрд╛рдЬ рдХреЗ рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдЪреВрдВрдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡рд╣ рдбреЛрдореЗрди рдЬреНрдЮрд╛рди рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЕрдЧрд▓рд╛ рдХрджрдо рд╢рд╛рдпрдж рдЖрдкрдХреЗ рдЗрдЪреНрдЫрд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдФрд░ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЪреБрдиреЗ рдЧрдП рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд░рдПрдлрд╕реА рд▓рд┐рдЦрдирд╛ рд╣реИ: https://github.com/reactjs/rfcsред рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ "рдЪрд▓реЛ рдмрд╕ рдЗрд╕реЗ рдмрджрд▓ рджреЗрдВ" рдХрд╣рдиреЗ рд╡рд╛рд▓рд╛ RFC рдорджрджрдЧрд╛рд░ рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИред рдПрдХ рдЕрдЪреНрдЫрд╛ RFC рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рджреЛрдиреЛрдВ рдХреЛ рд╕рдордЭрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХреНрдпреЛрдВ рд╣реИ, _рдФрд░_ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдмрджрд▓рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рд╣реИ рдЬреЛ рджреВрд╕рд░реЛрдВ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдП рдмрд┐рдирд╛ рдЖрдкрдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рдЕрдиреБрдХреВрд▓ рд╣реЛред

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

рдЪрд░реНрдЪрд╛ рдХрд┐рдП рдЧрдП рдзреНрд╡рдЬ, рдпрд╛ рд╢рд╛рдпрдж рдХрд┐рд╕реА рдЕрдиреНрдп рд╕рдорд╛рдзрд╛рди рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рд░рд┐рдПрдХреНрдЯ рдЖрд░рдПрдлрд╕реА рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдПрдХ (рд╢рд╛рдпрдж @justjake , @craigkovatch , рдпрд╛ @jquense) рдХрд╛ рдорд╕реМрджрд╛ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ? рдпрджрд┐ рдирд╣реАрдВ рддреЛ рдореИрдВ рджреЗрдЦреВрдВрдЧрд╛ рдХрд┐ рдореИрдВ рдХреНрдпрд╛ рд▓реЗрдХрд░ рдЖ рд╕рдХрддрд╛ рд╣реВрдВ!

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

@jquense рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рд╕рд╣реА рд╣реИред рд╣рд╛рдВ, рд╣рдо рдПрдХ рдЖрд░рдПрдлрд╕реА рдХреЛ рдорд░реНрдЬ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВ рдЬреЛ рджреГрд╖реНрдЯрд┐ рдХреЗ рд╕рд╛рде рд╕рдВрд░реЗрдЦрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдирдпрд╛ рдПрдкреАрдЖрдИ рдЬреЛрдбрд╝рдирд╛ рд╣рдореЗрд╢рд╛ рдХреНрд░реЙрд╕-рдХрдЯрд┐рдВрдЧ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЕрдиреНрдп рд╕рднреА рдирд┐рдпреЛрдЬрд┐рдд рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред рдФрд░ рдпрд╣ рд╕рд╣реА рд╣реИ рдХрд┐ рд╣рдо рдЕрдХреНрд╕рд░ рдЙрди рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдирд╣реАрдВ рдХрд░рддреЗ рдЬреЛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╣рдо рдЙрдирдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрдврд╝рддреЗ рд╣реИрдВ, рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЬрдм рд╣рдо рдХрд┐рд╕реА рдРрд╕реЗ рд╡рд┐рд╖рдп рдкрд░ рдкрд╣реБрдВрдЪрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдХреА рдЕрдзрд┐рдХ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рд╣реЛрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, https://github.com/reactjs/rfcs/pull/38 , https://github.com/ Reactjs/rfcs/pull/150 , https://github.com/reactjs/rfcs/pull/118 , https://github.com/reactjs/rfcs/pull/109 , https://github.com/reactjs/ rfcs/pull/32 рд╕рднреА рд╣рдорд╛рд░реА рд╕реЛрдЪ рдореЗрдВ рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рд░рд╣реЗ рд╣реИрдВ, рднрд▓реЗ рд╣реА рд╣рдордиреЗ рдЙрди рдкрд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЯрд┐рдкреНрдкрдгреА рдирд╣реАрдВ рдХреА рд╣реИред

рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рд╣рдо рдПрдХ рд╕рд╛рдореБрджрд╛рдпрд┐рдХ рдЕрдиреБрд╕рдВрдзрд╛рди рддрдВрддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрд░рдПрдлрд╕реА рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░рддреЗ рд╣реИрдВред @mogelbrod (https://github.com/facebook/react/issues/16721#issuecomment-674748100) рдХреА рдпрд╣ рдЯрд┐рдкреНрдкрдгреА рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ рдХрд┐ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХрд╖реНрдЯрдкреНрд░рдж рдХреНрдпреЛрдВ рд╣реИ, рдареАрдХ рдЙрд╕реА рддрд░рд╣ рдХреА рдЪреАрдЬ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо RFC рдореЗрдВ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдореМрдЬреВрджрд╛ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдФрд░ рдЙрдирдХреА рдХрдорд┐рдпреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдПрдХ рдареЛрд╕ рдПрдкреАрдЖрдИ рд╕реБрдЭрд╛рд╡ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдореВрд▓реНрдпрд╡рд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

@gaearon рдореЗрд░реА рдЯрд┐рдкреНрдкрдгреА рдпрд╣ тАЛтАЛрд╕реБрдЭрд╛рд╡ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЯреАрдо рдмрд╛рд╣рд░реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВ рд╕реБрдирддреА рд╣реИред рдЖрдк рдЗрд╕рдХрд╛ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реА рдЯрд┐рдкреНрдкрдгреА рд╕рдЯреАрдХ рд╣реИред _process_ рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ RFC рд░реЗрдкреЛ рдкрд░ рдЪрд▓рддрд╛ рд╣реИ, рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рд╕реЗ рд╕реНрд╡реАрдХреГрдд RFC рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдХрд┐рди RFC рдХрд╛ рд╡рд┐рд▓рдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХреЛрд░ рдЯреАрдо рдХреЗ рд╕рджрд╕реНрдп рдпрд╛ fb рдХрд░реНрдордЪрд╛рд░реА рд╣реИрдВ рдФрд░ рдХреЛрдИ рдирд╣реАрдВред рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдЬреЛ рдЗрд╕реЗ рдмрдирд╛рддреА рд╣реИрдВ, рдЖрдорддреМрд░ рдкрд░ рдереЛрдбрд╝реА рднрд┐рдиреНрди рд╣реЛрддреА рд╣реИрдВ рдФрд░ RFC рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рднреА рднрд╛рдЧ рдирд╣реАрдВ рд▓реЗрддреА рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЖрдЗрд╕реЛрдореЙрд░реНрдлрд┐рдХ рдЖрдИрдбреА)ред

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

рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рд╣рдо рдПрдХ рд╕рд╛рдореБрджрд╛рдпрд┐рдХ рдЕрдиреБрд╕рдВрдзрд╛рди рддрдВрддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрд░рдПрдлрд╕реА рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░рддреЗ рд╣реИрдВред

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

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

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

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

рдХрд╛рдлреА рдЙрдЪрд┐рдд, рдЖрд░рдПрдлрд╕реА рдкрд░ рдореЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рд╣реА рдЬрдЧрд╣ рдирд╣реАрдВ рд╣реИ :)

@gaearon рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд░рд┐рдПрдХреНрдЯ рдкрд░ рдЦреБрд▓рд╛ рдЫрдард╛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ

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

рдореБрдЭреЗ рдЗрд╕ рдзрд╛рдЧреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдкрд░ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдЙрддреНрддрд░ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред

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

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

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

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

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

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

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

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

рдПрдХ рдФрд░ рдмрд╛рдд рдЬреЛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рд╕реВрддреНрд░ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХреБрдЫ рджрд░реНрдж рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

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

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

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

рдЕрднреА рднреА рдШрдЯрдирд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред

рдЗрд╕реА рддрд░рд╣, рд░рд┐рдПрдХреНрдЯ 17 рдШрдЯрдирд╛рдУрдВ рдХреЛ рдЬрдбрд╝реЛрдВ рдФрд░ рдкреЛрд░реНрдЯрд▓ рдХрдВрдЯреЗрдирд░реЛрдВ рд╕реЗ рдЬреЛрдбрд╝ рджреЗрдЧрд╛ (рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрд╕ рдмрд┐рдВрджреБ рдкрд░ рдореВрд▓ рдкреНрд░рд╕рд╛рд░ рдХреЛ рд░реЛрдХ рджреЗрдЧрд╛) рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рднреА рд╣рд▓ рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИред

renderSubtreeIntoContainer рд╣рдЯрд╛рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВред рд╡рд╕реНрддреБрддрдГ ReactDOM.render рд╕реЗ рдЗрд╕рдХрд╛ рдПрдХрдорд╛рддреНрд░ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рд░рд╛рд╕рдд рдХреЗ рд╕рдВрджрд░реНрдн рдХрд╛ рдкреНрд░рдЪрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдХреЛрдИ рднреА рд░рд┐рд▓реАрдЬрд╝ рдЬрд┐рд╕рдореЗрдВ renderSubtreeIntoContainer рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдЙрд╕рдореЗрдВ рд▓реАрдЧреЗрд╕реА рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ рднреА рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛, ReactDOM.render 100% рд╕рдорд╛рди рд╡рд┐рдХрд▓реНрдк рд░рд╣реЗрдЧрд╛ред рдпрд╣, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╡реНрдпрд╛рдкрдХ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ renderSubtree рд╕рд╛рде рдЪрд┐рдВрддрд╛ рдХреБрдЫ рд╣рдж рддрдХ рдЧрд▓рдд рд╣реИред

@gaearon

renderSubtreeIntoContainer рд╣рдЯрд╛рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВред рд╡рд╕реНрддреБрддрдГ ReactDOM.render рд╕реЗ рдЗрд╕рдХрд╛ рдПрдХрдорд╛рддреНрд░ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рд░рд╛рд╕рдд рдХреЗ рд╕рдВрджрд░реНрдн рдХрд╛ рдкреНрд░рдЪрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдХреЛрдИ рднреА рд░рд┐рд▓реАрдЬрд╝ рдЬрд┐рд╕рдореЗрдВ renderSubtreeIntoContainer рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдЙрд╕рдореЗрдВ рд▓реАрдЧреЗрд╕реА рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ рднреА рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛, ReactDOM.render 100% рд╕рдорд╛рди рд╡рд┐рдХрд▓реНрдк рд░рд╣реЗрдЧрд╛ред рдпрд╣, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╡реНрдпрд╛рдкрдХ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ renderSubtree рд╕рд╛рде рдЪрд┐рдВрддрд╛ рдХреБрдЫ рд╣рдж рддрдХ рдЧрд▓рдд рд╣реИред

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

function Portal({ children }) {
  const containerRef = React.useRef();

  React.useEffect(() => {
    const container = document.createElement("div");
    containerRef.current = container;
    document.body.appendChild(container);
    return () => {
      ReactDOM.unmountComponentAtNode(container);
      document.body.removeChild(container);
    };
  }, []);

  React.useEffect(() => {
    ReactDOM.render(children, containerRef.current);
  }, [children]);

  return null;
}

рдХреБрдЫ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХреЛрдбрд╕реИрдВрдбрдмреЙрдХреНрд╕: https://codesandbox.io/s/react-portal-with-reactdom-render-m22dj?file=/src/App.js

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

рдПрдХ рдмрд╛рд░ рдлрд┐рд░, @gaearon рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд-рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж!

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЯреВрдЯреЗ рд╣реБрдП рдорд╛рдорд▓реЛрдВ рдХреА рд╕реВрдЪреА + рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб (рд░рд┐рдПрдХреНрдЯ v17 рдХреЗ рд▓рд┐рдП рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛) рдХреЛ рдПрдХрддреНрд░рд┐рдд рдХрд░рдирд╛ рдХреЛрд░ рдЯреАрдо рдХреЗ рдмрд╛рд╣рд░ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЙрддреНрдкрд╛рджрдХ рдЪреАрдЬ рд╣реЛрдЧреА (рдЕрдЧрд░ рдореИрдВ рдЧрд▓рдд рд╣реВрдВ рддреЛ рдореБрдЭреЗ рд╕реБрдзрд╛рд░реЗрдВ!)ред

рдореИрдВ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕рдкреНрддрд╛рд╣реЛрдВ рдореЗрдВ рдбреВрдмрд╛ рд╣реБрдЖ рд╣реВрдВ рд▓реЗрдХрд┐рди ASAP рдХрд░рдиреЗ рдХрд╛ рд▓рдХреНрд╖реНрдп рд░рдЦрддрд╛ рд╣реВрдВред рдЕрдЧрд░ рдХреЛрдИ рдФрд░ рдЗрд╕реЗ рдкрд╣рд▓реЗ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ, рдпрд╛ рд╕реНрдирд┐рдкреЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдЭрдВрдХрд╛рд░ (рдЬреИрд╕реЗ @diegohaz рдиреЗ рдЕрднреА рдХрд┐рдпрд╛), рддреЛ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛!

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

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

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

рдореБрдЭреЗ рдЗрдиреНрд╣реЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреА рдЕрдЧрд░ рдХреЛрдИ рдореБрдЭреЗ рдХреБрдЫ рдУрдкрди рд╕реЛрд░реНрд╕ рдХреЛрдб/рдирд┐рдХрд╛рд▓реЗ рдЧрдП рдХреЛрдб рдкрд░ рдЗрдВрдЧрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЙрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ! рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдпрд╣ рдЦреЛрдЬрдирд╛ рдПрдХ рдЪреБрдиреМрддреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХреЗрд╡рд▓ рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рд╡рд╛рд▓реЗ рд▓реЛрдЧ рд╣реА рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рд╢рд╛рдорд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВ

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

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

рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рдПрдХ рд╕реВрддреНрд░ рд╢реБрд░реВ рдХрд┐рдпрд╛: https://github.com/facebook/react/issues/19637 ред рдЖрдЗрдП рдЗрд╕реЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд░рдЦреЗрдВ, рдЬрдмрдХрд┐ рдпрд╣ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИред

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

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

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

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

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

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

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