React: рдмрдЧ: рдареАрдХ рдХрд░рдирд╛ рдмрд╣реБрдд рдХрдард┐рди рд╣реИ "рдХрд┐рд╕реА рднрд┐рдиреНрди рдШрдЯрдХ рдХреЗ рдлрд╝рдВрдХреНрд╢рди рдмреЙрдбреА рдХреЗ рдЕрдВрджрд░ рд╕реЗ рдХрд┐рд╕реА рдШрдЯрдХ рдХреЛ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред"

рдХреЛ рдирд┐рд░реНрдорд┐рдд 28 рдлрд╝рд░ре░ 2020  ┬╖  109рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: facebook/react

# рдиреЛрдЯ: рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ резрем.резрей.рез рдиреЗ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдХреЛ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╣рд╛рдВ рдпрд╣ рдУрд╡рд░рдлрд╛рдпрд░рд┐рдВрдЧ рдерд╛ред рдЕрдЧрд░ рд░рд┐рдПрдХреНрдЯ рдФрд░ рд░рд┐рдПрдХреНрдЯрдбреЙрдо рдХреЛ 16.13.1 рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рд╕реЗ рдЪреЗрддрд╛рд╡рдиреА рдареАрдХ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рддреЛ рдЗрд╕реЗ рдкрдврд╝реЗрдВ: https://github.com/facebook/react/issues/18178#issuecomment -595846312

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдВрд╕реНрдХрд░рдг:

16.13.0

рдкреНрд░рдЬрдирди рдХреЗ рдЪрд░рдг

  1. рдЯрд╛рдЗрдо рдорд╢реАрди рдмрдирд╛рдПрдВред
  2. рд╕рд╛рд▓ 2017 рдореЗрдВ рдЬрд╛рдПрдВред
  3. рдХреЛрдб рдХреА 10K рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рд╡рд┐рд╢рд╛рд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдмрдирд╛рдПрдБред
  4. package.json рдлрд╝рд╛рдЗрд▓ рдкрд░ 80 (!) рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рдЬрд┐рдирдореЗрдВ рд╡реЗ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬреЛ рдЕрдм рдЕрдиреБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИрдВред
  5. 27 рдлрд░рд╡рд░реА, 2020 рдХреЛ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВред
  6. рдвреЗрд░ рд╕рд╛рд░реА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдареАрдХ рдХрд░рдирд╛ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВред
  7. рдЕрдкрдиреЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдмрддрд╛рдПрдВ рдХрд┐ рд╕реБрдзрд╛рд░реЛрдВ рдореЗрдВ рдЕрдЬреНрдЮрд╛рдд рд╕рдордп рд▓рдЧрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП $$$ + рджрд┐рди рдпрд╛ рдЬрд╛рдВрдЪ рдХреЗ рд╕рдкреНрддрд╛рд╣ рдЦрд░реНрдЪ рд╣реЛрдВрдЧреЗ рдпрд╛ рд╣рдо рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рд░рд┐рдПрдХреНрдЯ рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдлрдВрд╕рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреА рдХреАрдордд рдЕрдзрд┐рдХ $$$ рд╣реЛрдЧреА рд▓реЗрдХрд┐рди рдмрд╛рдж рдореЗрдВред

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

рд╕рд┐рд░реНрдл рдПрдХ рдЙрджрд╛рд╣рд░рдг:

image

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

рдХреГрдкрдпрд╛ рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "UNSAFE" рд╡рд┐рдХрд▓реНрдк рдмрдирд╛рдПрдВ рдпрд╛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХрд╛ рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░реЗрдВ рдХрд┐ рддреНрд░реБрдЯрд┐ рдХрд╣рд╛рдВ рдлреЗрдВрдХреА рдЧрдИ рд╣реИ ЁЯЩП

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

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

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

рдЖрдк рд╕рднреА рдХреЛ рдзрдиреНрдпрд╡рд╛рджред

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

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

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

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

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

рдореЗрд░реЗ рд╕рд╛рде рдпрд╣ рддрдм рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдореИрдВ рдлреЙрд░реНрдорд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ

image

@sebmarkbage рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред > рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рджрд┐рдЦрдиреЗ рд╡рд╛рд▓рд╛ рд╕реНрдЯреИрдХрдЯреНрд░реЗрд╕ рд╣рд╛рд╕реНрдпрд╛рд╕реНрдкрдж рд╣реИред рдЗрд╕рдореЗрдВ 200+ рдЖрдЗрдЯрдо рд╣реИрдВ!

рдореИрдВ рдЗрд╕реЗ рд╡рд╣рд╛рдВ рдкреЗрд╕реНрдЯ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рдерд╛ рдпрд╛ рдкреЗрд╕реНрдЯрдмрд┐рди рдХреЛ рдПрдХ рд▓рд┐рдВрдХ рджреЗ рд░рд╣рд╛ рдерд╛ рд▓реЗрдХрд┐рди рдПрдХ рдЕрд▓рдЧ рджрд┐рд╢рд╛ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред рдореИрдВ рдХреБрдЫ рдкреНрд░рдпреБрдХреНрдд рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдЬреАрдердм рдореБрджреНрджреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рд╛ рдЧрдпрд╛ рдФрд░ рдкрд╛рдпрд╛ рдХрд┐ рд╕рдВрджрд┐рдЧреНрдзреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд░реЗрдбрдХреНрд╕-рдлреЙрд░реНрдо рд╣реИ: https://github.com/redux-form/redux-form/issues/4619ред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХрдорд╛рддреНрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ рдЬреЛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ рдФрд░ рдореИрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдлрд┐рдХреНрд╕ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред

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

@RodolfoSilva рдХреНрдпрд╛ рдЖрдк рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реИрдВ рдХрд┐ рдпрд╣ рдлреЙрд░реНрдорд┐рдХ рдХреЗ рдХрд╛рд░рдг рд╣реЛрддрд╛ рд╣реИ? рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рд╡рд╣рд╛рдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕рдХрд╛ рд▓рд┐рдВрдХ рдпрд╣рд╛рдВ рдкреЛрд╕реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдпрджрд┐ рд╕реВрдЪреА рдореЗрдВ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдЖрдЗрдЯрдо рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ рддреЛ рдореИрдВ рдЕрдкрдиреЗ рдкрд╣рд▓реЗ рд╕рдВрджреЗрд╢ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдРрд╕реЗ рдореБрджреНрджреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдмрдирд╛рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред

рдЗрд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ ASAP рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдЙрдиреНрдирдпрди рдХреЛ рдЕрд╕рдВрднрд╡ рдмрдирд╛ рджреЗрддрд╛ рд╣реИред рддреНрд░реБрдЯрд┐ рдЯреНрд░реЗрд╕ рдХрд╛рдлреА рдЕрд╕рдВрднрд╡ рд╣реИред

рд╣рдореНрдоред рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдореЗрдВ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреМрди рд╕реА рд░реЗрдЦрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓реЗрдЧреАред

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

@RodolfoSilva рдХреНрдпрд╛ рдЖрдк FormItemInput.js рдХрд╛ рд╕реНрд░реЛрдд рдкреЛрд╕реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдЧрд░ рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдбрд┐рд╕реНрдкреИрдЪ рдпрд╛ рд╕реЗрдЯрд╕реНрдЯреЗрдЯ рдХреЛ рд▓рд╛рдЗрди 71 рдкрд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

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

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

рдореБрдЭреЗ Redux-form рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ!

рдореБрдЭреЗ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ рдФрд░ рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЪреЗрддрд╛рд╡рдиреА рдкрд╣рд▓реА рдмрд╛рд░ рджрд┐рдЦ рд░рд╣реА рд╣реИ рдХрд┐ рдореИрдВ рдЕрдкрдиреЗ рд░реЗрдбрдХреНрд╕ рдлрд╝реАрд▓реНрдб рдореЗрдВ рд▓рд┐рдЦрддрд╛ рд╣реВрдВ рдпрд╛ рдЬрдм рдореИрдВ рдЗрд╕реЗ рд╕рд╛рдлрд╝ рдХрд░рддрд╛ рд╣реВрдВ

рдореБрдЭреЗ рднреА рд╡рд╣ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдпрд╣ рдореЗрд░рд╛ рдШрдЯрдХ рд╣реИ:

`рдХреЙрдиреНрд╕реНрдЯ [рдХреАрдордд, рд╕реЗрдЯрдкреНрд░рд╛рдЗрд╕] = рдпреВрдЬрд╝рд╕реНрдЯреЗрдЯ (0);

рд╕реНрдерд┐рд░рд╛рдВрдХ рдЕрджреНрдпрддрди рдореВрд▓реНрдп = (рдирдИ рдХреАрдордд) => {
рд╕реЗрдЯрдкреНрд░рд╛рдЗрд╕ (рдирдИ рдХреАрдордд)
}
< CardContainer onPriceUpdated={updatePrice} > CardContainer >
`

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

рдЕрдЧрд░ рдЖрдк рд▓реЛрдЧреЛрдВ рдХреЗ рдкрд╛рд╕ рдЗрд╕ рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕реБрдЭрд╛рд╡ рд╣реИ рддреЛ рдореИрдВ рдЗрд╕рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░реВрдВрдЧрд╛ ``

@l0gicgate

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

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

рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реНрдЯреИрдХ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХреЗ рдЖрдЧреЗ рдПрдХ рдЫреЛрдЯреЗ рддреАрд░ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ ред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ рдХреЗ рдЗрд╕ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдХреЛ рджреЗрдЦреЗрдВ:

75614021-cb812980-5b12-11ea-8a6e-a38f4cd6aeef

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

@martinezwilmer рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЫреЛрдЯрд╛ рд╣реИред рдХреГрдкрдпрд╛ рдПрдХ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдмрдирд╛рдПрдВред

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

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

рдЖрдк рд╕рднреА рдХреЛ рдзрдиреНрдпрд╡рд╛рджред

рдпрд╣рд╛рдВ рдЪреЗрддрд╛рд╡рдиреА рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдЯреАрдХ рд░реЗрдЦрд╛ рдЦреЛрдЬрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ:

@gaearon рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдлрд┐рд░ рд╕реЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЯрд┐рдк рд╣реИ?

image

рдпрд╣рд╛рдВ рдЪреЗрддрд╛рд╡рдиреА рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдЯреАрдХ рд░реЗрдЦрд╛ рдЦреЛрдЬрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ:

рдХреНрдпрд╛ рдореБрд╢реНрдХрд┐рд▓ рдмрдирд╛рддрд╛ рд╣реИ? рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рд╣реИ рдЬреЛ рджрд╛рдИрдВ рдУрд░ "рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛" рдирд╣реАрдВ рдХрд╣рддреА рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ Redux рд╕реЗ connectAdvanced рд╣реИред рдХреГрдкрдпрд╛ рд░рд┐рдПрдХреНрдЯ рд░реЗрдбрдХреНрд╕ рдореЗрдВ рдПрдХ рд╕рдорд╕реНрдпрд╛ рджрд░реНрдЬ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдЕрдиреБрд░рдХреНрд╖рдХреЛрдВ рдХреЛ рдЗрд╕реЗ рджреЗрдЦрдиреЗ рдХрд╛ рдореМрдХрд╛ рдорд┐рд▓реЗред

рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдЕрдкрдереНрд░реЗрдб рдХрд╣рд╛, рдореБрдЭреЗ _very_ рдЖрд╢реНрдЪрд░реНрдп рд╣реЛрдЧрд╛ рдпрджрд┐ рдпрд╣рд╛рдВ рдЬреЛ рдХреБрдЫ рднреА рд╣реЛ рд░рд╣рд╛ рд╣реИ рд╡рд╣ React-Redux рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИред

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

рдореИрдВ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЗрд╕рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛ рдФрд░ рдлрд┐рдХреНрд╕ setState рд╣реИрдВрдбрд▓рд░ рдХреЙрд▓ рд╕рд╛рдЗрдЯреЛрдВ рдХреЛ useEffect рд▓рдкреЗрдЯ рд░рд╣рд╛ рдерд╛, рдЬреИрд╕реЗ: https://github.com/airbnb/lunar/commit/db08613d46ea21089ead3e7b5cfff995f15c69a7#diff -1c3bdd397b1ce506414248887 ( onChange рдФрд░ onSubmit рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдКрдкрд░ setState рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ)ред

@martinezwilmer onPriceUpdated рдХрд╣рд╛рдБ рдХрд╣рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ? рд╢рд╛рдпрдж рдЗрд╕реЗ useEffect рдореЗрдВ рд▓рдкреЗрдЯрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ?

рдРрд╕рд╛ рд╣реА рдореБрджреНрджрд╛ urql рд▓рд┐рдП рд╣реЛ рд░рд╣рд╛ рд╣реИ

рд╣рдо рдЕрдкрдиреЗ рдЕрдкрдбреЗрдЯ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП use-subscription + рд╡реЛрдВрдХрд╛ (рд╕реНрдЯреНрд░реАрдо рдХреЗ рд▓рд┐рдП) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдПрдХ рдЕрдкрдбреЗрдЯ рд╕рдордХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдЖ рд╕рдХрддрд╛ рд╣реИред рдпрд╣рд╛рдВ рд╣рдо рдкрд╣рд▓реЗ рд╣реА todos рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рд╣рдо Open рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдкрд░рд┐рдгрд╛рдо рддреБрд░рдВрдд рдкреЙрдк рдЕрдк рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдиреЗ рд▓рдЧрддрд╛ рд╣реИред

image

рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдЗрд░рд╛рджрд╛ рд╣реИ, рд╣рдо рдПрдХ рд╕рд┐рдВрдХ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд▓рд┐рдП рд╕рд┐рд░реНрдл fetching: true рдирд╣реАрдВ рджрд┐рдЦрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЙрдЫрд▓-рдХреВрдж рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЗрдВрдЯрд░рдлреЗрд╕ рд╣реЛрдВрдЧреЗред

рдпрд╣ рдЕрдм рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдХреНрд░реЙрдк рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд░рд╣рд╛ рд╣реИ: urql , Apollo ред

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

рдЕрдкреЛрд▓реЛ рдореБрджреНрджреЗ рд╕реЗ рдПрдХ рдмрд╛рдд рдЬреЛ рдореИрдВрдиреЗ рдиреЛрдЯ рдХреА рд╡рд╣ рд╣реИ:

рдЪреЗрддрд╛рд╡рдиреА рдХрд╛ рд╕реНрдЯреИрдХрдЯреНрд░реИрдХ рдЙрд╕ рдШрдЯрдХ рдХреЛ рджрд┐рдЦрд╛ рд░рд╣рд╛ рд╣реИ рдЬрд┐рд╕рдиреЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд┐рдпрд╛, рди рдХрд┐ рд╡рд╣ рдЬреЛ рдЙрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рджреНрд╡рд╛рд░рд╛ [sic] рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ

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

@hugo рдХреА рддрд░рд╣, рдореБрдЭреЗ рдПрдХ рдирдП рдЖрдпрдирд┐рдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╕рдордп рдЗрд╕рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛:

  1. npx ionic start demo sidemenu --type=react
  2. react-scripts test

рджрд░рдЕрд╕рд▓, рдХрд╛рд░рдг рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рдХреЗ рдмреАрдЪ рдФрд░ рдиреАрдЪреЗ рджрдмреЗ рд╣реБрдП рд╣реИрдВред

console.error node_modules/react-dom/cjs/react-dom.development.js:88
    Warning: Cannot update a component from inside the function body of a different component.
        in Route (at App.tsx:37)
        in View (created by StackManagerInner)
        in ViewTransitionManager (created by StackManagerInner)
        in ion-router-outlet (created by IonRouterOutlet)
        in IonRouterOutlet (created by ForwardRef(IonRouterOutlet))
        in ForwardRef(IonRouterOutlet) (created by StackManagerInner)
        in StackManagerInner (created by Context.Consumer)
        in Unknown (created by Component)
        in Component (created by ForwardRef(IonRouterOutlet))
        in ForwardRef(IonRouterOutlet) (at App.tsx:36)
        in ion-split-pane (created by IonSplitPane)
        in IonSplitPane (created by ForwardRef(IonSplitPane))
        in ForwardRef(IonSplitPane) (at App.tsx:34)
        in NavManager (created by RouteManager)
        in RouteManager (created by Context.Consumer)
        in RouteManager (created by IonReactRouter)
        in Router (created by BrowserRouter)
        in BrowserRouter (created by IonReactRouter)
        in IonReactRouter (at App.tsx:33)
        in ion-app (created by IonApp)
        in IonApp (created by ForwardRef(IonApp))
        in ForwardRef(IonApp) (at App.tsx:32)
        in App (at App.test.tsx:6)

рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдЦреЛрдЬреА рдЬрд╛ рд╕рдХрдиреЗ рд╡рд╛рд▓реА рд╕рдмрд╕реЗ рдирдЬрд╝рджреАрдХреА рд╕рдорд╕реНрдпрд╛ рдереАред

рд╣рдореЗрдВ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреИрдЯрд░реНрди рдорд┐рд▓рд╛ рдЬреЛ https://github.com/mobxjs/mobx-react/issues/846 рдореЗрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред

@sebmarkbage рдореИрдВ рдЕрдм рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдкреЗрд╢ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рд╣рдордиреЗ рдХреБрдЫ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдФрд░ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рд╣реИред

@jgoux рд╣рдореЗрдВ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИ @ рдХреНрд▓реЛрд╡рд┐рд╕ ^^ рд╕реНрдкреЙрдЯреЗрдб

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

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

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

рдореЗрд░реЗ рд▓рд┐рдП, рдпрд╣ рд╡рд╣ рдкреИрдЯрд░реНрди рд╣реИ рдЬреЛ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред

image

рдЗрд╕рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреЛрдИ рд░рд╛рд╕реНрддрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдХрдВрд╕реЛрд▓ рд▓реЙрдЧ рдиреЗ рдореБрдЭреЗ рд╕реАрдзреЗ рд▓рд╛рдЗрди 385 . рдкрд░ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛

рдореИрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирдпрд╛ рд╣реВрдБ рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдХреЛрдб рдерд╛:

import React, { useState } from "react";

function Home() {
  const [mobileNavOpen, setMobileNavOpen] = useState(false);
  return (
    <div>
      <button
        onClick={(): void => setMobileNavOpen(true)}
        type="button"
        className="btn"
      >
        X
      </button>
      {mobileNavOpen && <MobileNav setMobileNavOpen={setMobileNavOpen}/>}
    </div>
  );
}

function MobileNav() {
  return (
    <div>
      <button
        onClick={setMobileNavOpen(false)} //problem here
        type="button"
        className="btn"
      >
        X
      </button>
    </div>
  );
}

export default Home;

рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк: Cannot update a component from inside the function body of a different component.

рдореБрдЭреЗ рдмрд╕ рдЗрддрдирд╛ рдХрд░рдирд╛ рд╣реИ рдХрд┐ MobileNav рдореЗрдВ MobileNavOpen рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрд░реЛ рдлрдВрдХреНрд╢рди рдЬреЛрдбрд╝реЗрдВ:

import React, { useState } from "react";

function Home() {
  const [mobileNavOpen, setMobileNavOpen] = useState(false);
  return (
    <div>
      <button
        onClick={(): void => setMobileNavOpen(true)}
        type="button"
        className="btn"
      >
        X
      </button>
      {mobileNavOpen && <MobileNav setMobileNavOpen={setMobileNavOpen}/>}
    </div>
  );
}

function MobileNav() {
  return (
    <div>
      <button
        onClick={(): void => setMobileNavOpen(false)} //fixes problem
        type="button"
        className="btn"
      >
        X
      </button>
    </div>
  );
}

export default Home;

рдФрд░ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИ, рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдХреА рдорджрдж рдХрд░реЗрдЧрд╛!

рдореИрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирдпрд╛ рд╣реВрдБ рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдХреЛрдб рдерд╛:

import React, { useState } from "react";

function Home() {
  const [mobileNavOpen, setMobileNavOpen] = useState(false);
  return (
    <div>
      <button
        onClick={(): void => setMobileNavOpen(true)}
        type="button"
        className="btn"
      >
        X
      </button>
      {mobileNavOpen && <MobileNav setMobileNavOpen={setMobileNavOpen}/>}
    </div>
  );
}

function MobileNav() {
  return (
    <div>
      <button
        onClick={setMobileNavOpen(false)} //problem here
        type="button"
        className="btn"
      >
        X
      </button>
    </div>
  );
}

export default Home;

рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк: Cannot update a component from inside the function body of a different component.

рдореБрдЭреЗ рдмрд╕ рдЗрддрдирд╛ рдХрд░рдирд╛ рд╣реИ рдХрд┐ MobileNav рдореЗрдВ MobileNavOpen рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрд░реЛ рдлрдВрдХреНрд╢рди рдЬреЛрдбрд╝реЗрдВ:

import React, { useState } from "react";

function Home() {
  const [mobileNavOpen, setMobileNavOpen] = useState(false);
  return (
    <div>
      <button
        onClick={(): void => setMobileNavOpen(true)}
        type="button"
        className="btn"
      >
        X
      </button>
      {mobileNavOpen && <MobileNav setMobileNavOpen={setMobileNavOpen}/>}
    </div>
  );
}

function MobileNav() {
  return (
    <div>
      <button
        onClick={(): void => setMobileNavOpen(false)} //fixes problem
        type="button"
        className="btn"
      >
        X
      </button>
    </div>
  );
}

export default Home;

рдФрд░ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИ, рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдХреА рдорджрдж рдХрд░реЗрдЧрд╛!

рдЖрдкрдХрд╛ рдЙрджрд╛рд╣рд░рдг рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрди рд╢реБрд░реБрдЖрддреА рдЧрд▓рддрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЬреЛ рд▓реЛрдЧ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдХрд░рддреЗ рд╣реИрдВред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╣реА рдореБрджреНрджрд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдпрд╣рд╛рдВ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИред рдЖрдкрдХреА рд▓рд╛рдЗрди рдпрд╣рд╛рдВ: onClick={setMobileNavOpen(false) рдмрдЯрди рдЯреЗрдВрдбрд░ рдХреЗ рджреМрд░рд╛рди рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░ рд░рд╣реА рд╣реИ, рдХреНрд▓рд┐рдХ рдкрд░ рдирд╣реАрдВред рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдПрд░реЛ рдлрдВрдХреНрд╢рди рдореЗрдВ рд▓рдкреЗрдЯрдиреЗ рд╕реЗ рдпрд╣ рдареАрдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

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

рдкрд╣рд▓реЗ:

<Route
  render={routeProps => {
    setRedirectionTarget(somePath(routeProps));
    return <Redirect to={someOtherPath} />;
  }}
/>;

function mapDispatchToProps(dispatch: ThunkDispatch) {
  return {
    setRedirectionTarget: (target: string | null) => dispatch(setRedirectionTarget(target))
  };
}

export const setRedirectionTarget = (location: string | null): SetRedirectionTarget => {
  return {
    type: SET_REDIRECTION_TARGET,
    location
  };
};

рдмрд╛рдж рдореЗрдВ:

function mapDispatchToProps(dispatch: ThunkDispatch) {
  return {
    setRedirectionTarget: async (target: string | null) => dispatch(await setRedirectionTarget(target))
  };
}

export const setRedirectionTarget = (location: string | null): Promise<SetRedirectionTarget> => {
  return Promise.resolve({
    type: SET_REDIRECTION_TARGET,
    location
  });
};

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

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

рдореБрдЭреЗ рдЗрд╕ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛ рд░рд╣реА рд╣реИред рдХреЛрдИ рд╕рдВрдХреЗрдд рдЬреЛ рдореБрдЭреЗ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП?

@ samcooke98 рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдкреАрдЖрд░ рдЦреЛрд▓рд╛ рд╣реИ https://github.com/facebook/react/pull/18316

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

export const useOrderbookSubscription = marketId => {
  const { data, error, loading } = useSubscription(ORDERBOOK_SUBSCRIPTION, {
    variables: {
      marketId,
    },
  })

  const formattedData = useMemo(() => {
    // Don't dispatch in here.
  }, [data])

  // Don't dispatch here either

  // Dispatch in a useEffect
  useEffect(() => {
    orderbookStore.dispatch(setOrderbookData(formattedData))
  }, [formattedData])

  return { data: formattedData, error, loading }
}

рд╣рдо рд╣рд╛рдЗрдкрд░ рдореЗрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рдереЗ рд▓реЗрдХрд┐рди рд╣рдо рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдХреЙрд▓ рд╕реНрдЯреИрдХ рд╕реЗ рд░реЗрдВрдбрд░ рдХреЙрд▓ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдорд┐рд▓рд╛ред рд▓реЗрдХрд┐рди рд╕реНрдЯреИрдХ рдореЗрдВ UNSAFE_componentWillReceiveProps рдореЗрдВ рдПрдХ рдХреЙрд▓ рдЖрдИ рдереАред рдЕрджреНрдпрддрди рдХрд░ рд░рд╣рд╛ рд╣реИ рдХрд┐ componentDidUpdate рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рддрдп рд╣реЛ рдЧрдИ рд╣реИ https://github.com/zeit/hyper/pull/4382
рдЗрд╕реЗ рдпрд╣рд╛рдВ рдкреЛрд╕реНрдЯ рдХрд░реЗрдВ рдЕрдЧрд░ рдпрд╣ рдХрд┐рд╕реА рдХреА рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ

рдпрд╣рд╛рдВ рднреА, рдПрдХ UNSAFE_componentWillMount рдХреЙрд▓ рдерд╛, рдЗрд╕реЗ рдмрджрд▓рдиреЗ/рд╣рдЯрд╛рдиреЗ рд╕реЗ рд╕рдорд╕реНрдпрд╛ рдареАрдХ рд╣реЛ рдЧрдИ

рд▓реЗрдХрд┐рди рд╣рдо рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдХреЙрд▓ рд╕реНрдЯреИрдХ рд╕реЗ рд░реЗрдВрдбрд░ рдХреЙрд▓ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдкрд╛ рд╕рдХреЗ

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

рд▓реЗрдХрд┐рди рд╣рдо рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдХреЙрд▓ рд╕реНрдЯреИрдХ рд╕реЗ рд░реЗрдВрдбрд░ рдХреЙрд▓ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдкрд╛ рд╕рдХреЗ

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

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

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИред рдХреНрдпрд╛ рдЖрдк рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдХреВрдмрдбрд╝ рд╣реИ рдХрд┐ рдЖрдк рдХреБрдЫ рдФрд░ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реЛрдВрдЧреЗред

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

рдХреНрдпрд╛ рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЙрд╕ рд╕рдордп рдШрдЯрдХ рдореЗрдВ UNSAFE_componentWillReceiveProps рдФрд░ componentDidUpdate рджреЛрдиреЛрдВ рдереЗ (рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╡рд╣рд╛рдВ рдЧрд▓рддреА рд╕реЗ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛)?

рдореБрдЭреЗ рдпрд╣ рдЪреЗрддрд╛рд╡рдиреА рднреА рдорд┐рд▓ рд░рд╣реА рд╣реИ, рдФрд░ рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ setScriptLoaded рд╣реБрдХ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддрд╛ рд╣реИ (рдореЗрд░реЗ рдХрд╕реНрдЯрдо рд╣реБрдХ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рджреЗрдЦреЗрдВ)ред рддреЛ рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рднрд▓реЗ рд╣реА рдореИрдВ useEffect рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдлрд┐рд░ рднреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдлреЗрдВрдХ рджреЗрдЧреА рдпрджрд┐ setState рд╣реИрдВрдбрд▓рд░ рдЕрдиреНрдп рдПрд╕рд┐рдВрдХ рдХреЙрд▓рдмреИрдХ рдХреЗ рднреАрддрд░ рдШреЛрдВрд╕рд▓рд╛ рд╣реИ (рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ setTimeout рдореЗрдВ рдШреЛрдВрд╕рд▓рд╛ рд╣реИ load рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░)? рдореИрдВ рдкрд╣рд▓реА рдмрд╛рд░ рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдХрд┐рд╕реА рднреА рд╕рд▓рд╛рд╣ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░реВрдВрдЧрд╛ред рд╢реБрдХреНрд░рд┐рдпрд╛!

/**
 * Detect when 3rd party script is ready to use
 * 
 * <strong i="11">@param</strong> {function} verifyScriptLoaded Callback to verify if script loaded correctly
 * <strong i="12">@param</strong> {string} scriptTagId 
 */

export const useScriptLoadStatus = (verifyScriptLoaded, scriptTagId) => {
    let initLoadStatus = true; // HTML already includes script tag when rendered server-side
    if (__BROWSER__) {
        initLoadStatus = typeof verifyScriptLoaded === 'function' ? verifyScriptLoaded() : false;
    }
    const [isScriptLoaded, setScriptLoaded] = useState(initLoadStatus); 

    useEffect(() => {
        if (!isScriptLoaded) {
            // need to wrap in setTimeout because Helmet appends the script tags async-ly after component mounts (https://github.com/nfl/react-helmet/issues/146)
            setTimeout(() => {
                let newScriptTag = document.querySelector(`#${scriptTagId}`);
                if (newScriptTag && typeof verifyScriptLoaded === 'function') {
                    newScriptTag.addEventListener('load', () => { 
                        return verifyScriptLoaded() ? setScriptLoaded(true) : null;
                    });
                    // double check if script is already loaded before the event listener is added
                    return verifyScriptLoaded() ? setScriptLoaded(true) : null;
                }
            }, 100);
        }
    });

    return isScriptLoaded;
};

@LabhanshAgrawal

рдХреНрдпрд╛ рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ UNSAFE_componentWillReceiveProps рдФрд░ рдШрдЯрдХрдбрд┐рдбрдЕрдкрдбреЗрдЯ рджреЛрдиреЛрдВ рдЙрд╕ рд╕рдордп рдШрдЯрдХ рдореЗрдВ рдереЗ (рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдПрдХ рдЧрд▓рддреА рд╕реЗ рд╡рд╣рд╛рдВ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛)?

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

@suhanw рдХреГрдкрдпрд╛

@LabhanshAgrawal рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдЕрдкрдирд╛ рдкреВрд░рд╛ рд╕реНрдЯреИрдХ рдкреЛрд╕реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬреЛ рд╣реЛ рд░рд╣рд╛ рд╣реИ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ UNSAFE_componentWillReceiveProps (рдЬреЛ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ) рдХрд┐рд╕реА рдЕрдиреНрдп рдШрдЯрдХ рдкрд░ setState рдкрд░ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред

backend.js:6 Warning: Cannot update a component from inside the function body of a different component.
    in Term                           (created by _exposeDecorated(Term))
    in _exposeDecorated(Term)         (created by DecoratedComponent)
    in DecoratedComponent             (created by TermGroup_)
    in TermGroup_                     (created by ConnectFunction)
    in ConnectFunction                (created by Connect(TermGroup_))
    in Connect(TermGroup_)            (created by _exposeDecorated(TermGroup))
    in _exposeDecorated(TermGroup)    (created by DecoratedComponent)
    in DecoratedComponent             (created by Terms)
    in div                            (created by Terms)
    in div                            (created by Terms)
    in Terms                          (created by _exposeDecorated(Terms))
    in _exposeDecorated(Terms)        (created by DecoratedComponent)
    in DecoratedComponent             (created by ConnectFunction)
    in ConnectFunction                (created by Connect(DecoratedComponent))
    in Connect(DecoratedComponent)    (created by Hyper)
    in div                            (created by Hyper)
    in div                            (created by Hyper)
    in Hyper                          (created by _exposeDecorated(Hyper))
    in _exposeDecorated(Hyper)        (created by DecoratedComponent)
    in DecoratedComponent             (created by ConnectFunction)
    in ConnectFunction                (created by Connect(DecoratedComponent))
    in Connect(DecoratedComponent)
    in Provider
r                                     @ backend.js:6
printWarning                          @ react-dom.development.js:88
error                                 @ react-dom.development.js:60
warnAboutRenderPhaseUpdatesInDEV      @ react-dom.development.js:23260
scheduleUpdateOnFiber                 @ react-dom.development.js:21196
dispatchAction                        @ react-dom.development.js:15682
checkForUpdates                       @ connectAdvanced.js:88
handleChangeWrapper                   @ Subscription.js:97
(anonymous)                           @ Subscription.js:23
batchedUpdates$1                      @ react-dom.development.js:21887
notify                                @ Subscription.js:19
notifyNestedSubs                      @ Subscription.js:92
checkForUpdates                       @ connectAdvanced.js:77
handleChangeWrapper                   @ Subscription.js:97
(anonymous)                           @ Subscription.js:23
batchedUpdates$1                      @ react-dom.development.js:21887
notify                                @ Subscription.js:19
notifyNestedSubs                      @ Subscription.js:92
handleChangeWrapper                   @ Subscription.js:97
dispatch                              @ redux.js:222
e                                     @ VM64:1
(anonymous)                           @ effects.ts:11
(anonymous)                           @ write-middleware.ts:14
(anonymous)                           @ index.js:11
(anonymous)                           @ plugins.ts:538
(anonymous)                           @ plugins.ts:540
(anonymous)                           @ index.js:11
dispatch                              @ redux.js:638
(anonymous)                           @ sessions.ts:124
(anonymous)                           @ index.js:8
dispatch                              @ VM64:1
onResize                              @ terms.ts:62
(anonymous)                           @ term.js:179
e.fire                                @ xterm.js:1
t.resize                              @ xterm.js:1
e.resize                              @ xterm.js:1
e.fit                                 @ xterm-addon-fit.js:1
fitResize                             @ term.js:291
UNSAFE_componentWillReceiveProps      @ term.js:408
callComponentWillReceiveProps         @ react-dom.development.js:12998
updateClassInstance                   @ react-dom.development.js:13200
updateClassComponent                  @ react-dom.development.js:17131
beginWork                             @ react-dom.development.js:18653
beginWork$1                           @ react-dom.development.js:23210
performUnitOfWork                     @ react-dom.development.js:22185
workLoopSync                          @ react-dom.development.js:22161
performSyncWorkOnRoot                 @ react-dom.development.js:21787
(anonymous)                           @ react-dom.development.js:11111
unstable_runWithPriority              @ scheduler.development.js:653
runWithPriority$1                     @ react-dom.development.js:11061
flushSyncCallbackQueueImpl            @ react-dom.development.js:11106
flushSyncCallbackQueue                @ react-dom.development.js:11094
batchedUpdates$1                      @ react-dom.development.js:21893
notify                                @ Subscription.js:19
notifyNestedSubs                      @ Subscription.js:92
handleChangeWrapper                   @ Subscription.js:97
dispatch                              @ redux.js:222
e                                     @ VM64:1
(anonymous)                           @ effects.ts:11
(anonymous)                           @ write-middleware.ts:14
(anonymous)                           @ index.js:11
(anonymous)                           @ plugins.ts:538
(anonymous)                           @ plugins.ts:540
(anonymous)                           @ index.js:11
dispatch                              @ redux.js:638
effect                                @ ui.ts:60
(anonymous)                           @ effects.ts:13
(anonymous)                           @ write-middleware.ts:14
(anonymous)                           @ index.js:11
(anonymous)                           @ plugins.ts:538
(anonymous)                           @ plugins.ts:540
(anonymous)                           @ index.js:11
dispatch                              @ redux.js:638
(anonymous)                           @ ui.ts:54
(anonymous)                           @ index.js:8
dispatch                              @ VM64:1
(anonymous)                           @ index.tsx:162
emit                                  @ events.js:210
(anonymous)                           @ rpc.ts:31
emit                                  @ events.js:210
onMessage                             @ init.ts:50

@gaearon рддреНрд╡рд░рд┐рдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддреЗ рд╣реИрдВред рдореИрдВ рдХреЛрдбрд╕реИрдВрдбрдмреЙрдХреНрд╕ (рдпрд╣ рдЪреБрдиреМрддреАрдкреВрд░реНрдг рд╣реИ) рдореЗрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╕рдордЭреВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕ рдмреАрдЪ, рдпрд╣ рдореЗрд░рд╛ рдкреВрд░рд╛ рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рд╣реИ

рдореЗрд░реЗ рдХрд╕реНрдЯрдо рд╣реБрдХ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рд░реЗрдЦрд╛ рдпрд╣ рд╣реИ: https://gist.github.com/suhanw/bcc2688bba131df8301dae073977654f#file -stack-trace-L144

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

@LabhanshAgrawal рдЖрдкрдХреЗ рд╕реНрдЯреИрдХ рдореЗрдВ, UNSAFE_componentWillReceiveProps рдХреБрдЫ fitResize UNSAFE_componentWillReceiveProps рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдПрдХ Redux рдХреНрд░рд┐рдпрд╛ рднреЗрдЬрддрд╛ рд╣реИ, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ рдШрдЯрдХреЛрдВ рдХреЗ рдПрдХ рд╕рдореВрд╣ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рд╣реИред рддреЛ рд╣рд╛рдБ, рдЗрд╕реЗ рдмрджрд▓рдХрд░ componentDidUpdate рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

@suhanw рдЖрдкрдХреЗ рд╕реНрдЯреИрдХ рдореЗрдВ, ModuleImpressionTracker рдирд╛рдордХ рдХреБрдЫ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рджреМрд░рд╛рди Redux рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкреНрд░реЗрд╖рд┐рдд рдХрд░рддрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░реНрд╕ рдХреЗ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рдирд╣реАрдВ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдХрд╛рд░рдг рд╣реИ, рдЖрдкрдХрд╛ рд╣реБрдХ рдирд╣реАрдВред

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

@LabhanshAgrawal

рдХреНрдпрд╛ рдЖрдк рдЗрд╕ рдкрд░ рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдШрдЯрдХреЛрдВ рдФрд░ рд╣реБрдХ рд╕реЗрдЯрд╕реНрдЯреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдПрдХ рдореБрджреНрджрд╛ рд╣реИ, рдЗрд╕реЗ рдКрдкрд░ рдХреА рдЪрд░реНрдЪрд╛ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрд╛ред

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

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ urql рд▓рд┐рдП @gaearon рдХрд╛ рдЗрд░рд╛рджрд╛ рд╣реИ рддреЛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ:

  • рд╣рдордиреЗ рдЕрдкрдирд╛ <Todos /> рдорд╛рдЙрдВрдЯ рдХрд┐рдпрд╛ рд╣реИ, рдЬреЛ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИ
  • рдкрд┐рдЫрд▓рд╛ рд╕реЗрдЯ рдЕрдк urqlClient рдЬреБрдбрд╝реА рдПрдХ рд╕реНрдЯреНрд░реАрдо
  • рд╣рдо рдЕрдкрдирд╛ рджреВрд╕рд░рд╛ <Todos /> рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╣реИрдВ рдпрд╣ рдПрдХ рд╣реА рдХреНрд╡реЗрд░реА + рдЪрд░ рд╕рдВрдпреЛрдЬрди рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░реЗрдЧрд╛ рдЗрд╕рд▓рд┐рдП рдкрд╣рд▓реЗ рдЪрд░рдг рдХреЗ <Todos /> рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рд░реАрдлреНрд░реЗрд╢ рдХрд░реЗрдЧрд╛ред
  • use-subscription рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЯреНрд░рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рд░реЗрдкреНрд░реЛ - рдкрд╣рд▓реА рдХреНрд╡реЗрд░реА рдкреНрд░рд╕реНрддреБрдд рд╣реЛрдиреЗ рдкрд░ рд╢реАрд░реНрд╖ рдкрд░ "рдУрдкрди" рджрдмрд╛рдПрдВред

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

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рд╣рдо рджреМрд░рд╛рди рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рд▓рдХреНрд╖реНрдп рдирд╣реАрдВ рджреНрд╡рд╛рд░рд╛ urql рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓ рдЧрдпрд╛ рд╣реИ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ getCurrentValue рдПрдХ рдХреА use-subscription

https://github.com/FormidableLabs/urql/commit/3a597dd92587ef852c18139e9781e853f763e930

рдареАрдХ рд╣реИ рддреЛ рдЗрд╕рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдореВрд▓ рд░реВрдк рд╕реЗ рдЗрд░рд╛рджрд╛ рд╕реЗ рдЕрдзрд┐рдХ рдорд╛рдорд▓реЛрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП) рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рджреЗ рд░рд╣реЗ рд╣реИрдВред рд╣рдо рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреЛ рдЪреБрдк рдХрд░рд╛рдиреЗ рдкрд░ рдЧреМрд░ рдХрд░реЗрдВрдЧреЗред

@JoviDeCroock рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ urql рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИред :-) рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдкреИрдЯрд░реНрди рдкрд░ рдлреАрдбрдмреИрдХ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдХреНрдпрд╛ рдЖрдк рдЙрд╕ рдкреИрдЯрд░реНрди рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рддреИрдпрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

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

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

function useCustomHook() {
   const dispatch = useDispatch()
   const value = useSomeOtherHook()
   dispatch(action(value))
}

рдореИрдВрдиреЗ рдкреНрд░реЗрд╖рдг рдХреЛ useEffect рдореЗрдВ рд▓рдкреЗрдЯрдХрд░ рдЗрд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ред

@Glinkis рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ рдПрдХ рдЦрд░рд╛рдм рдкреИрдЯрд░реНрди рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред рдЬрдм рднреА рдХреЛрдИ рдШрдЯрдХ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдЖрдк рдкреВрд░реЗ рдкреЗрдбрд╝ рдХреЛ рдХреНрдпреЛрдВ рд╕реВрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ?

@gaearon рд╣рд╛рдБ, рдЬрд┐рд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рдо рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рдереЗ, рдЙрд╕реЗ рдпрд╣рд╛рдБ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╕рдордЭрд╛рдпрд╛ рдЧрдпрд╛

@Glinkis рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ рдПрдХ рдЦрд░рд╛рдм рдкреИрдЯрд░реНрди рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред рдЬрдм рднреА рдХреЛрдИ рдШрдЯрдХ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдЖрдк рдкреВрд░реЗ рдкреЗрдбрд╝ рдХреЛ рдХреНрдпреЛрдВ рд╕реВрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ?

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

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

@Glinkis рдорд╛рд░реНрдЧ рдбреЗрдЯрд╛ рдХрд╣рд╛рдБ рд╕реЗ рдЖ рд░рд╣рд╛ рд╣реИ?

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

@Glinkis рдорд╛рд░реНрдЧ рдбреЗрдЯрд╛ рдХрд╣рд╛рдБ рд╕реЗ рдЖ рд░рд╣рд╛ рд╣реИ?

рдпрдХреАрди рдирд╣реАрдВ рд╣реЛрддрд╛ рдХрд┐ рдпрд╣ рдореИрдВ рдЗрд╕ рдЪрд░реНрдЪрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдореЗрд░рд╛ рд╣реБрдХ рд╣реИред

export function useOpenFolder() {
  const dispatch = useDispatch()
  const match = useRouteMatch('/:workspace/(super|settings)?/:type?/:id?/(item)?/:item?')
  const { id, item } = match?.params || {}

  useEffect(() => {
    dispatch(
      openFolder({
        id: id || '',
        item: item || '',
      })
    )
  }, [dispatch, item, id])
}

рдореИрдВ рдмрд╛рдж рдореЗрдВ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд░рд╛рдЬреНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдЬреИрд╕реЗ:

export const getActiveItem = createSelector(
  [getActiveFolderItem, getItems],
  (activeItem, items) => items.all[activeItem]
)

@Glinkis рд╣рд╛рдБ рд╢рд╛рдпрдж рдЗрд╕реЗ рдпрд╣рд╛рдБ рд▓рдкреЗрдЯреЗрдВ рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рдореВрд▓ рдШрдЯрдХ рдореЗрдВ useRouteMatch рдкрдврд╝рдирд╛ рд╣реЛрдЧрд╛, рдЖрдИрдбреА рдХреЛ рдПрдХ рдкреНрд░реЛрдк рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдлрд┐рд░ рдЪрдпрдирдХрд░реНрддрд╛ рдореЗрдВ рдкреНрд░реЛрдк рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдкрдврд╝рдирд╛ рд╣реЛрдЧрд╛ред (рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдпрд╣ рдЗрди рджрд┐рдиреЛрдВ Redux рдореЗрдВ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдХреЛрдИ рд░рд╛рд╕реНрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред)

рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕рд╕реЗ рджреВрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реВрдВ рдХрд┐ UNSAFE_componentWillReceiveProps рдХреЛ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рд░реВрдк рдореЗрдВ рдЧрд┐рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди componentDidUpdate рдирд╣реАрдВ рд╣реИред

@LabhanshAgrawal рдпрд╣ рд╕рд╣реА рд╣реИред рдХреБрдЫ рдкреГрд╖реНрдарднреВрдорд┐ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдпрд╣рд╛рдБ :

рд╡реИрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ, рд░рд┐рдПрдХреНрдЯ рджреЛ рдЪрд░рдгреЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

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

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

рд░реЗрдВрдбрд░ рдЪрд░рдг рдЬреАрд╡рдирдЪрдХреНрд░ рдореЗрдВ рдирд┐рдореНрди рд╡рд░реНрдЧ рдШрдЯрдХ рд╡рд┐рдзрд┐рдпрд╛рдБ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

  • constructor
  • componentWillMount (рдпрд╛ UNSAFE_componentWillMount )
  • componentWillReceiveProps (рдпрд╛ UNSAFE_componentWillReceiveProps )
  • componentWillUpdate (рдпрд╛ UNSAFE_componentWillUpdate )
  • getDerivedStateFromProps
  • shouldComponentUpdate
  • render
  • setState рдЕрджреНрдпрддрдирдХрд░реНрддрд╛ рдХрд╛рд░реНрдп (рдкрд╣рд▓рд╛ рддрд░реНрдХ)

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

рдареАрдХ рд╣реИ рддреЛ рдЗрд╕рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдореВрд▓ рд░реВрдк рд╕реЗ рдЗрд░рд╛рджрд╛ рд╕реЗ рдЕрдзрд┐рдХ рдорд╛рдорд▓реЛрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП) рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рджреЗ рд░рд╣реЗ рд╣реИрдВред рд╣рдо рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреЛ рдЪреБрдк рдХрд░рд╛рдиреЗ рдкрд░ рдЧреМрд░ рдХрд░реЗрдВрдЧреЗред

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

рдпрд╣ рд╕реНрд╡-рд╡реНрдпрд╛рдЦреНрдпрд╛рддреНрдордХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ "рдХрд┐рд╕реА рднрд┐рдиреНрди рдШрдЯрдХ рдХреЗ рдлрд╝рдВрдХреНрд╢рди рдмреЙрдбреА рдХреЗ рдЕрдВрджрд░ рд╕реЗ рдПрдХ рдШрдЯрдХ рдХреЛ рдЕрджреНрдпрддрди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛"

рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдШрдЯрдХ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВред

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

const App = () => {  
  const fetchRecords = () => { 
    return <div>Loading..</div>;
  };  
  return fetchRecords() // and not like <FetchRecords /> unless it is functional component.
};
export default App;

@rpateld рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЖрдк рдЬреЛ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рдЗрд╕ рдЪреЗрддрд╛рд╡рдиреА рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред

https://github.com/facebook/react/pull/18330 рдЙрди рдорд╛рдорд▓реЛрдВ рдХреЛ рд╣рд▓ рдХрд░реЗрдЧрд╛ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдордиреЗ рдлрд╛рдпрд░рд┐рдВрдЧ рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛ред

рдореИрдВ react@experimental + react-redux + redux рд╕рд╛рде рднреА рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
image

рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

import React, { Suspense } from 'react'
import { bindActionCreators } from 'redux'
import { connect } from 'react-redux'
import { Redirect } from 'react-router-dom'
import PropTypes from 'prop-types'
import { userActions, cabinetActions, tokensActions } from '../../actions'
import { CircularProgress } from '@material-ui/core'
import { api } from './api'

const Cabinet = ({ resource }) => {
    resource.read()
    return <h1>cabinet</h1>
}

Cabinet.propTypes = {
    resource: PropTypes.shape({
        read: PropTypes.func
    })
}

const CabinetPage = ({
    failedToLoad,
    tokensRefreshFailed,
    logout,
    loadCabinet,
    clearTokens,
    clearCabinet
}) => {
    if (tokensRefreshFailed || failedToLoad) {
        clearTokens()
        clearCabinet()
        logout()
        return <Redirect to='/login' />
    }

    return (
        <Suspense fallback={<CircularProgress />}>
            <Cabinet resource={loadCabinet()} />
        </Suspense>
    )
}

CabinetPage.propTypes = {
    loadCabinet: PropTypes.func,
    failedToLoad: PropTypes.bool,
    tokensRefreshFailed: PropTypes.bool,
    logout: PropTypes.func,
    clearTokens: PropTypes.func,
    clearCabinet: PropTypes.func
}

const mapStateToProps = ({
    alert,
    tokens: { tokensRefreshFailed },
    cabinet: { failedToLoad }
}) => ({
    alert,
    tokensRefreshFailed,
    failedToLoad
})

const mapDispatchToProps = dispatch =>
    bindActionCreators(
        {
            cabinetLoad: cabinetActions.load,
            logout: userActions.logoutWithoutRedirect,
            loadCabinet: api.loadCabinet,
            clearCabinet: cabinetActions.clear,
            clearTokens: tokensActions.clear
        },
        dispatch
    )

export default connect(mapStateToProps, mapDispatchToProps)(CabinetPage)

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

@ h0tw4t3r рдЖрдк рдПрдХ рдШрдЯрдХ рдХреЗ рд░реЗрдВрдбрд░ рдХреЗ рджреМрд░рд╛рди рдПрдХ Redux рдХреНрд░рд┐рдпрд╛ рднреЗрдЬ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ, рдФрд░ рдпрд╣реА рдЪреЗрддрд╛рд╡рдиреА рд╣реИред рд░рд┐рдПрдХреНрдЯ рд░рд╛рдЙрдЯрд░ рдХреЗ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮреЛрдВ рд╕реЗ рдЗрд╕ рдорд╛рдорд▓реЗ (рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ) рдХреЛ рдЗрдирд╛рдпрдд рд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреВрдЫрдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ, рдЙрд╕ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рдорджрдж рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред

рд╕рдорд╡рд░реНрддреА рдореЛрдб рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ Redux рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЗрд╕рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк рд╕реАрдПрдо рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рддреЛ рдЖрдк рдЗрд╕рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред

рдЗрд╕ рд╕реВрддреНрд░ рдкрд░ рдЫреЛрдЯрд╛ рдЕрдкрдбреЗрдЯ

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

рдпрджрд┐ рдЖрдк рдХрд╛рд░рдгреЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░рддреЗ рд░рд╣рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ https://github.com/facebook/react/issues/18178#issuecomment -595846312 рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗред

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

рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдШрдЯрдХ (рд╣реБрдХ):

import React, { Component } from "react"
import SortableTree from "react-sortable-tree"
import "react-sortable-tree/style.css"

const data = [
  {
    title: "Windows 10",
    subtitle: "running",
    children: [
      {
        title: "Ubuntu 12",
        subtitle: "halted",
        children: [
          {
            title: "Debian",
            subtitle: "gone"
          }
        ]
      },
      {
        title: "Centos 8",
        subtitle: "hardening"
      },
      {
        title: "Suse",
        subtitle: "license"
      }
    ]
  }
]

const nodeInfo = row => console.log(row)

export default class App extends Component {
  constructor(props) {
    super(props)

    this.state = {
      searchString: "",
      searchFocusIndex: 0,
      searchFoundCount: null,
      treeData: data
    }
  }

  render() {
    const { searchString, searchFocusIndex, searchFoundCount } = this.state

    const customSearchMethod = ({ node, searchQuery }) =>
      searchQuery &&
      ((node.title &&
        node.title.toLowerCase().indexOf(searchQuery.toLowerCase()) > -1) ||
        (node.subtitle &&
          node.subtitle.toLowerCase().indexOf(searchQuery.toLowerCase()) > -1))

    const selectPrevMatch = () =>
      this.setState({
        searchFocusIndex:
          searchFocusIndex !== null
            ? (searchFoundCount + searchFocusIndex - 1) % searchFoundCount
            : searchFoundCount - 1
      })

    const selectNextMatch = () =>
      this.setState({
        searchFocusIndex:
          searchFocusIndex !== null
            ? (searchFocusIndex + 1) % searchFoundCount
            : 0
      })

    return (
      <div>
        <h2>Find the needle!</h2>
        <form
          style={{ display: "inline-block" }}
          onSubmit={event => {
            event.preventDefault()
          }}
        >
          <input
            id="find-box"
            type="text"
            placeholder="Search..."
            style={{ fontSize: "1rem" }}
            value={searchString}
            onChange={event =>
              this.setState({ searchString: event.target.value })
            }
          />
          &nbsp;
          <button
            type="button"
            disabled={!searchFoundCount}
            onClick={selectPrevMatch}
          >
            &lt;
          </button>
          &nbsp;
          <button
            type="submit"
            disabled={!searchFoundCount}
            onClick={selectNextMatch}
          >
            &gt;
          </button>
          &nbsp;
          <span>
            &nbsp;
            {searchFoundCount > 0 ? searchFocusIndex + 1 : 0}
            &nbsp;/&nbsp;
            {searchFoundCount || 0}
          </span>
        </form>

        <div style={{ height: 300 }}>
          <SortableTree
            treeData={this.state.treeData}
            onChange={treeData => this.setState({ treeData })}
            searchMethod={customSearchMethod}
            searchQuery={searchString}
            searchFocusOffset={searchFocusIndex}
            searchFinishCallback={matches =>
              this.setState({
                searchFoundCount: matches.length,
                searchFocusIndex:
                  matches.length > 0 ? searchFocusIndex % matches.length : 0
              })
            }
            generateNodeProps={row => {
              return {
                title: row.node.title,
                subtitle: (
                  <div style={{ lineHeight: "2em" }}>{row.node.subtitle}</div>
                ),
                buttons: [
                  <button
                    type="button"
                    className="btn btn-outline-success"
                    style={{
                      verticalAlign: "middle"
                    }}
                    onClick={() => nodeInfo(row)}
                  >
                    тД╣
                  </button>
                ]
              }
            }}
          />
        </div>
      </div>
    )
  }
}

image

рд╡рд░реНрдЧ рдШрдЯрдХ:

import React from "react";
import SortableTree from "react-sortable-tree";
import "react-sortable-tree/style.css";

const data = [
  {
    title: "Windows 10",
    subtitle: "running",
    children: [
      {
        title: "Ubuntu 12",
        subtitle: "halted",
        children: [
          {
            title: "Debian",
            subtitle: "gone"
          }
        ]
      },
      {
        title: "Centos 8",
        subtitle: "hardening"
      },
      {
        title: "Suse",
        subtitle: "license"
      }
    ]
  }
];

const nodeInfo = row => console.log(row);

export default class App extends React.Component {
  constructor(props) {
    super(props);

    this.state = {
      searchString: "",
      searchFocusIndex: 0,
      searchFoundCount: null,
      treeData: data
    };
  }

  render() {
    const { searchString, searchFocusIndex, searchFoundCount } = this.state;

    const customSearchMethod = ({ node, searchQuery }) =>
      searchQuery &&
      ((node.title &&
        node.title.toLowerCase().indexOf(searchQuery.toLowerCase()) > -1) ||
        (node.subtitle &&
          node.subtitle.toLowerCase().indexOf(searchQuery.toLowerCase()) > -1));

    const selectPrevMatch = () =>
      this.setState({
        searchFocusIndex:
          searchFocusIndex !== null
            ? (searchFoundCount + searchFocusIndex - 1) % searchFoundCount
            : searchFoundCount - 1
      });

    const selectNextMatch = () =>
      this.setState({
        searchFocusIndex:
          searchFocusIndex !== null
            ? (searchFocusIndex + 1) % searchFoundCount
            : 0
      });

    return (
      <div>
        <h2>Find the needle!</h2>
        <form
          style={{ display: "inline-block" }}
          onSubmit={event => {
            event.preventDefault();
          }}
        >
          <input
            id="find-box"
            type="text"
            placeholder="Search..."
            style={{ fontSize: "1rem" }}
            value={searchString}
            onChange={event =>
              this.setState({ searchString: event.target.value })
            }
          />
          &nbsp;
          <button
            type="button"
            disabled={!searchFoundCount}
            onClick={selectPrevMatch}
          >
            &lt;
          </button>
          &nbsp;
          <button
            type="submit"
            disabled={!searchFoundCount}
            onClick={selectNextMatch}
          >
            &gt;
          </button>
          &nbsp;
          <span>
            &nbsp;
            {searchFoundCount > 0 ? searchFocusIndex + 1 : 0}
            &nbsp;/&nbsp;
            {searchFoundCount || 0}
          </span>
        </form>

        <div style={{ height: 300 }}>
          <SortableTree
            treeData={this.state.treeData}
            onChange={treeData => this.setState({ treeData })}
            searchMethod={customSearchMethod}
            searchQuery={searchString}
            searchFocusOffset={searchFocusIndex}
            searchFinishCallback={matches =>
              this.setState({
                searchFoundCount: matches.length,
                searchFocusIndex:
                  matches.length > 0 ? searchFocusIndex % matches.length : 0
              })
            }
            generateNodeProps={row => {
              return {
                title: row.node.title,
                subtitle: (
                  <div style={{ lineHeight: "2em" }}>{row.node.subtitle}</div>
                ),
                buttons: [
                  <button
                    type="button"
                    className="btn btn-outline-success"
                    style={{
                      verticalAlign: "middle"
                    }}
                    onClick={() => nodeInfo(row)}
                  >
                    тД╣
                  </button>
                ]
              };
            }}
          />
        </div>
      </div>
    );
  }
}

@radulle рдпрд╣ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд╣реА рдЙрдкрдпреЛрдЧреА рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕реЗ рдХреЛрдбрд╕реИрдВрдбрдмреЙрдХреНрд╕ рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ: https://codesandbox.io/s/clever-taussig-9xixsред рдХреНрдпрд╛ рдЖрдк рдПрдХ рдЙрджрд╛рд╣рд░рдг рддреИрдпрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рд╣рдо рдЖрдЬрдорд╛ рд╕рдХрддреЗ рд╣реИрдВ?

@gaearon рдореИрдВ рдПрдХ рдХреЛрдбрд╕реИрдВрдбрдмреЙрдХреНрд╕ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рд▓реЗрдХрд┐рди рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВред рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рдбрд╛рд▓реА рдЧрдИ рд╣реИред рдлрд┐рд▓рд╣рд╛рд▓ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдХреНрд░рд┐рдПрдЯ рд░рд┐рдПрдХреНрдЯ рдРрдк рдореЗрдВ рдЗрд╕реЗ рд╕реНрдкрд┐рди рдХрд░рдирд╛ рд╣реИ :(

@radulle рдореИрдВ рдХреМрди рд╕рд╛ рд╕рдВрд╕реНрдХрд░рдг рдЖрдЬрд╝рдорд╛ рд╕рдХрддрд╛ рд╣реВрдВ рдЬреЛ рдХреЛрдбрд╕реИрдВрдбрдмреЙрдХреНрд╕ рдкрд░ рдХрд╛рдо рдХрд░реЗрдЧрд╛?

@gaearon 2.6.2 рдЗрд╕ рд╕реЗрдЯрдЕрдк рдХреЗ рд╕рд╛рде рддреНрд░реБрдЯрд┐/рдЪреЗрддрд╛рд╡рдиреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдлреЗрдВрдХрддрд╛ рд╣реИ:
image
рддреЛ рдЙрд╕реА рд╕реЗрдЯрдЕрдк рдХреЗ рд▓рд┐рдП:
рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдШрдЯрдХ: рддреНрд░реБрдЯрд┐рдпрд╛рдВ/рдЪреЗрддрд╛рд╡рдиреА
рдХрдХреНрд╖рд╛ рдШрдЯрдХ: рдХреЛрдИ рддреНрд░реБрдЯрд┐/рдЪреЗрддрд╛рд╡рдиреА рдирд╣реАрдВ
рд╢рд╛рдпрдж рдореБрдЭреЗ рдХреБрдЫ рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИ рдФрд░ рд╡реЗ рд╕рдордХрдХреНрд╖ рдирд╣реАрдВ рд╣реИрдВред

рд╣рд╛рдБ, рдпрд╣ рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдореИрдВрдиреЗ https://github.com/facebook/react/issues/18178#issuecomment -600369392 рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИред рд╣рдо рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рдореНрдпреВрдЯ рдХрд░ рджреЗрдВрдЧреЗред рдЪреЗрддрд╛рд╡рдиреА рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рд╡реИрдз рд╣реИ рдФрд░ рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдареАрдХ рд╣реА рдХрд╣рддреЗ рд╣реИрдВ, рд╡реИрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдпрд╣ рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рднреА рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡рд┐рд╕рдВрдЧрддрд┐ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ рдЕрднреА рдХреЗ рд▓рд┐рдП рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдореНрдпреВрдЯ рдХрд░ рджреЗрдВрдЧреЗ рдЬрдм рдпрд╣ рдПрдХ рд╡рд░реНрдЧ рд╕реЗ рдЖ рд░рд╣рд╛

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

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

  • рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рд╕рдВрджрд░реНрдн рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рдмреНрд░реЗрдбрдХреНрд░рдВрдм рд╣реИрдВ
  • рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реБрдХ рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ рдмреНрд░реЗрдбрдХреНрд░рдВрдм рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреИрд╕реЗ:

    const addBreadcrumb = useAddBreadcrumb();
    addBreadcrumb(<Breadcrumb>{item.name}</Breadcrumb>, [item.name]);
    
  • рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдШрдЯрдХ рд╣реИ рдЬреЛ рд╕рдВрджрд░реНрдн рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рдкрдврд╝рддрд╛ рд╣реИ, рдФрд░ рд╕рднреА рдмреНрд░реЗрдбрдХреНрд░рдВрдм рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЬрдм рднреА рд╣рдо рдмреНрд░реЗрдбрдХреНрд░рдВрдм рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдЗрд╕реЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

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

рддреЛ, react-router рдХреЗ рд╕рд╛рде рд╕рдВрдпреБрдХреНрдд, рд╣рдо рдРрд╕рд╛ рдХреБрдЫ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

// Main/index.tsx
import { useAddBreadcrumb } from 'components/Breadcrumbs';
import React from 'react';
import Home from './Home';
import Movies from './Movies';

const Main = () => {
    const addBreadcrumb = useAddBreadcrumb();
    addBreadcrumb(<Breadcrumb to="/">Home</Breadcrumb>, []);

    return <Switch>
        <Route path="/movies">
            <Movies />
        </Route>
        <Route path="/" />
            <Home />
        </Route>
    </Switch>
}

// Movies/index.tsx
import { useAddBreadcrumb } from 'components/Breadcrumbs';
import React from 'react';
import Detail from './Detail';
import Master from './Master';

const Movies = ({ url }) => {
    const addBreadcrumb = useAddBreadcrumb();
    addBreadcrumb(<Breadcrumb to={url}>Movies</Breadcrumb>, [url]);

    return <Switch>
        <Route path="/:id">
            <Detail />
        </Route>
        <Route path="/" />
            <Master />
        </Route>
    </Switch>
}

// Movies/Detail/index.tsx
import Breadcrumbs, { useAddBreadcrumb } from 'components/Breadcrumbs';
import React from 'react';
import { useRouteMatch } from 'react-router-dom';

const MovieDetail = ({ url }) => {
    const addBreadcrumb = useAddBreadcrumb();
    const { params: { id } } = useRouteMatch<{ id: string; }>();
    const movie = useMovie(id);

    addBreadcrumb(
        <Breadcrumb to={url}>{movie?.name}</Breadcrumb>,
        [movie?.name, url]
    );

    return <div>
        <Breadcrumbs />
    </div>
}

рдЕрдм, рдЕрдЧрд░ рд╣рдо /movies/gone-with-the-wind , рддреЛ рд╣рдорд╛рд░реЗ рдмреНрд░реЗрдбрдХреНрд░рдВрдм рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдВрдЧреЗ:

Home > Movies > Gone with the wind

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

рдЕрдм, рдЪреИрдВрдЬ рдпрд╣ рдХрд╣рддрд╛ рд╣реИ:

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

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

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

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

@MeLlamoPablo

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

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

@gaearon , рдЖрдкрдХреА рдЕрдВрддрд░реНрджреГрд╖реНрдЯрд┐ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореЗрд░рд╛ рдПрдХ рд╕рд╡рд╛рд▓ рд╣реИ: рдХреНрдпрд╛ рдкрд╣рд▓реЗ рд░реЗрдВрдбрд░ рдХреЗ рдСрд░реНрдбрд░ рдХреА рдЧрд╛рд░рдВрдЯреА рд╣реИ? рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдареАрдХ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╕ рдЗрддрдирд╛ рд╣реА рдЪрд╛рд╣рд┐рдП (рдПрдХ рдмрд╛рд░ рдЬрдм рд╣рдо рдмреНрд░реЗрдбрдХреНрд░рдВрдм рдХреЗ рдХреНрд░рдо рдХреЛ рдЬрд╛рди рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдмрд╛рдж рдХреЗ рд░реЗрдВрдбрд░ рдХреЗ рдХреНрд░рдо рдХреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ)ред

рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рддрд╛рд░реНрдХрд┐рдХ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд╣рд▓реЗ рд░реЗрдВрдбрд░ рдХреЗ рдСрд░реНрдбрд░ рдХреА рдЧрд╛рд░рдВрдЯреА рд╣реИред рд░рд┐рдПрдХреНрдЯ рдХреЛ рдХреИрд╕реЗ рдкрддрд╛ рдЪрд▓реЗрдЧрд╛ рдХрд┐ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рдШрдЯрдХ рдореЗрдВ рдХреЛрдИ рдЕрдиреНрдп рдмрдЪреНрдЪреЗ рд╣реИрдВ?

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

@MeLlamoPablo

рдореЗрд░рд╛ рдПрдХ рд╕рд╡рд╛рд▓ рд╣реИ: рдХреНрдпрд╛ рдкрд╣рд▓реЗ рд░реЗрдВрдбрд░ рдХреЗ рдСрд░реНрдбрд░ рдХреА рдЧрд╛рд░рдВрдЯреА рд╣реИ? рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдареАрдХ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╕ рдЗрддрдирд╛ рд╣реА рдЪрд╛рд╣рд┐рдП (рдПрдХ рдмрд╛рд░ рдЬрдм рд╣рдо рдмреНрд░реЗрдбрдХреНрд░рдВрдм рдХреЗ рдХреНрд░рдо рдХреЛ рдЬрд╛рди рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдмрд╛рдж рдХреЗ рд░реЗрдВрдбрд░ рдХреЗ рдХреНрд░рдо рдХреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ)ред

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

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

рд╕рд╣реЛрджрд░ рдЖрджреЗрд╢ рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИред рдорд╛рддрд╛-рдкрд┐рддрд╛/рдмрдЪреНрдЪреЗ рдХреЗ рдЖрджреЗрд╢ рдХреЗ рд▓рд┐рдП, рдЖрдк рд╕рд╣реА рд╣реИрдВ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЛ рдкрд╣рд▓реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛; рд╣рд╛рд▓рд╛рдБрдХрд┐, рд░рд┐рдПрдХреНрдЯ рдХреЛ рдмрдЪреНрдЪреЗ рдХреЛ рдорд┐рд▓рдиреЗ рд╕реЗ

рдпрд╣ рдирд╛рдЬреБрдХ рд╣реИред

@gaearon , рдлрд┐рд░ рд╕реЗ рдзрдиреНрдпрд╡рд╛рджред рдпрд╣ рдмрд╣реБрдд рд╣реА рдкреНрд░рд╢рдВрд╕рдиреАрдп рд╣реИред

рд╢рд╛рдпрдж рдПрдХ ESLint рдирд┐рдпрдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдПрдХ рд░реЗрдВрдбрд░ рдмреЙрдбреА рдХреЗ рднреАрддрд░ useState рдореНрдпреВрдЯреЗрдЯрд░ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдЦрд┐рд▓рд╛рдл рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реИ?

рд░реЗрдВрдбрд░ рдХреЗ рджреМрд░рд╛рди рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдШрдЯрдХ рдХреЗ рд╕реЗрдЯрд╕реНрдЯреЗрдЯ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдПрдХ рд╕рдорд░реНрдерд┐рдд рдкреИрдЯрд░реНрди рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕реЗ рдХрдо рд╕реЗ рдХрдо рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП)ред рдпрд╣ рдЕрдиреНрдп рдШрдЯрдХреЛрдВ рдкрд░ рд╕реЗрдЯрд╕реНрдЯреЗрдЯ рд╣реИ рдЬреЛ рдЦрд░рд╛рдм рд╣реИрдВред рдЖрдк рдЙрдирдХреЛ рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдкрд╣рдЪрд╛рди рдирд╣реАрдВ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ ts-eslint рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рд╡реЗ рд╕рд╣реА рдЕрдкрд╕реНрдЯреНрд░реАрдо рд░рд┐рдПрдХреНрдЯ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рд╛рдБ, рд╢рд╛рдпрдж рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рдпрд╛рд╕ред

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

рдореИрдВ react@experimental + react-redux + redux рд╕рд╛рде рднреА рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
image

рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

import React, { Suspense } from 'react'
import { bindActionCreators } from 'redux'
import { connect } from 'react-redux'
import { Redirect } from 'react-router-dom'
import PropTypes from 'prop-types'
import { userActions, cabinetActions, tokensActions } from '../../actions'
import { CircularProgress } from '@material-ui/core'
import { api } from './api'

const Cabinet = ({ resource }) => {
  resource.read()
  return <h1>cabinet</h1>
}

Cabinet.propTypes = {
  resource: PropTypes.shape({
      read: PropTypes.func
  })
}

const CabinetPage = ({
  failedToLoad,
  tokensRefreshFailed,
  logout,
  loadCabinet,
  clearTokens,
  clearCabinet
}) => {
  if (tokensRefreshFailed || failedToLoad) {
      clearTokens()
      clearCabinet()
      logout()
      return <Redirect to='/login' />
  }

  return (
      <Suspense fallback={<CircularProgress />}>
          <Cabinet resource={loadCabinet()} />
      </Suspense>
  )
}

CabinetPage.propTypes = {
  loadCabinet: PropTypes.func,
  failedToLoad: PropTypes.bool,
  tokensRefreshFailed: PropTypes.bool,
  logout: PropTypes.func,
  clearTokens: PropTypes.func,
  clearCabinet: PropTypes.func
}

const mapStateToProps = ({
  alert,
  tokens: { tokensRefreshFailed },
  cabinet: { failedToLoad }
}) => ({
  alert,
  tokensRefreshFailed,
  failedToLoad
})

const mapDispatchToProps = dispatch =>
  bindActionCreators(
      {
          cabinetLoad: cabinetActions.load,
          logout: userActions.logoutWithoutRedirect,
          loadCabinet: api.loadCabinet,
          clearCabinet: cabinetActions.clear,
          clearTokens: tokensActions.clear
      },
      dispatch
  )

export default connect(mapStateToProps, mapDispatchToProps)(CabinetPage)

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

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

const CabinetPage = ({
    alert,
    failedToLoad,
    tokensRefreshFailed,
    logout,
    loadCabinet,
    clearTokens,
    clearCabinet,
    clearAlert
}) => (
    <Suspense fallback={<MUIBackdropProgress />}>
        {alert.message && (failedToLoad || tokensRefreshFailed) ? (
            <MUIAlertDialog
                title={alert.message}
                text={errorText}
                onClose={() => {
                    clearAlert()
                    clearCabinet()
                    clearTokens()
                    logout()
                }}
            />
        ) : (
            <Cabinet resource={loadCabinet()} />
        )}
    </Suspense>
)

рдореБрдЭреЗ рдпрд╣ рдЪреЗрддрд╛рд╡рдиреА рдкрд╕рдВрдж рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрдкрдХреЛ рд╕рд╣реА рдбрд┐рдЬрд╝рд╛рдЗрди рдкреИрдЯрд░реНрди рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рдХрд░рддреА рд╣реИред рдЕрдм рд╕рдм рдХреБрдЫ рддреНрд░реБрдЯрд┐рдкреВрд░реНрдг рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!

рд╣рдордиреЗ 16.13.1 рдореЗрдВ рдЙрди рдорд╛рдорд▓реЛрдВ рдХреЛ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╣рд╛рдВ рдЪреЗрддрд╛рд╡рдиреА рдЕрддрд┐-рдлрд╛рдпрд░рд┐рдВрдЧ рдереАред рд╢реЗрд╖ рдорд╛рдорд▓реЗ рд╡реИрдз рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдареАрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

@gaearon рдЕрднреА рдЕрдкрдЧреНрд░реЗрдб рд╣реБрдЖ рдФрд░ рддреНрд░реБрдЯрд┐ рдЧрд╛рдпрдм рд╣реЛ рдЧрдИ! рдЖрдкрдХреЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рджреЛрд╕реНрддреЛрдВ!

@gaearon рдзрдиреНрдпрд╡рд╛рджред рдЖрдкрдиреЗ рдЕрднреА рдореЗрд░рд╛ рджрд┐рди рдмрдЪрд╛рдпрд╛ :-)

рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рд╕реЗ рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реБрдЖ, рдЗрд╕рдиреЗ рдореБрдЭреЗ рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдВрд╕реЛрд▓ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рджреАред рдзрдиреНрдпрд╡рд╛рдж @gaearon !

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

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

1) рдЕрдкрдиреЗ рд░рд╛рдЬреНрдп рдХреЛ рдЕрдкрдиреЗ рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рдЙрддрдирд╛ рдКрдВрдЪрд╛ рд░рдЦреЗрдВ рдЬрд┐рддрдирд╛ рдЖрдкрдХреЛ рдЪрд╛рд╣рд┐рдП (рдХреЛрдИ рдЙрдЪреНрдЪрддрд░ рдирд╣реАрдВ), рдФрд░ рдлрд┐рд░ рдбреЗрдЯрд╛ рдкрд╛рд╕ рдХрд░реЗрдВ рдФрд░ рдмрд╛рд▓ рдШрдЯрдХреЛрдВ рдХреЛ рд╕реЗрдЯ рдХрд░реЗрдВ

2) рдлрдВрдХреНрд╢рди рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕ рдХрдорд╛рд▓ рдХреЗ рд╣реИрдВ! рдЙрд╕ рд╡рд░реНрдЧ рд╢реЛрд░ рдХреЛ рднреВрд▓ рдЬрд╛рдУ, рдЕрдкрдирд╛ рдкреВрд░рд╛ рдШрдЯрдХ рдПрдХ рд╕рдорд╛рд░реЛрд╣ рдореЗрдВ рдХрд░реЗрдВ!

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

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

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

@ рдорд╛рдЪрд┐рдирдШреЛрд╕реНрдЯ : рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЧрд▓рдд рд╕рдордЭ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рд╕рдВрджреЗрд╢ рдХрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рджреЗ рд░рд╣рд╛ рд╣реИред

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

рд╕рдорд╕реНрдпрд╛ рддрдм рд╣реЛрддреА рд╣реИ рдЬрдм рдПрдХ рдШрдЯрдХ рджреВрд╕рд░реЗ рдШрдЯрдХ рдореЗрдВ рдЕрджреНрдпрддрди рдХреЛ рдХрддрд╛рд░рдмрджреНрдз рдХрд░рддрд╛ рд╣реИ, _рдЬрдмрдХрд┐ рдкрд╣рд▓рд╛ рдШрдЯрдХ рдкреНрд░рддрд┐рдкрд╛рджрди_ рдХрд░ рд░рд╣рд╛ рд╣реИред

рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдРрд╕рд╛ рди рдХрд░реЗрдВ:

function SomeChildComponent(props) {
    props.updateSomething();
    return <div />
}

рд▓реЗрдХрд┐рди рдпрд╣ рдареАрдХ рд╣реИ:

function SomeChildComponent(props) {
    // or make a callback click handler and call it in there
    return <button onClick={props.updateSomething}>Click Me</button>
}

рдФрд░, рдЬреИрд╕рд╛ рдХрд┐ рдбреИрди рдиреЗ рдХрдИ рдмрд╛рд░ рдмрддрд╛рдпрд╛ рд╣реИ, рдкреНрд░рддрд┐рдкрд╛рджрди рдХрд░рддреЗ рд╕рдордп _same_ рдШрдЯрдХ рдореЗрдВ рдПрдХ рдЕрджреНрдпрддрди рдХреЛ рдХрддрд╛рд░рдмрджреНрдз рдХрд░рдирд╛ рднреА рдареАрдХ рд╣реИ:

function SomeChildComponent(props) {
  const [number, setNumber] = useState(0);

  if(props.someValue > 10 && number < 5) {
    // queue an update while rendering, equivalent to getDerivedStateFromProps
    setNumber(42);
  }

  return <div>{number}</div>
}

рдареАрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рдЖрдк рдЕрдкрдиреЗ рдШрдЯрдХ рдХреЛ рдХреЛрдб рдХрд░ рд░рд╣реЗ рд╣реИрдВ рддреЛ рдЖрдк рдЗрд╕рдХреЗ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рд╕рдордп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рд░рд┐рдПрдХреНрдЯ рдШрдЯрдХреЛрдВ рдХреА рд╕реБрдВрджрд░рддрд╛ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ: рдПрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рдиред

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

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

@ рдорд╛рдЪрд┐рдирдШреЛрд╕реНрдЯ : рдЖрдк _truly_ рдЬреЛ рдореИрдВ рдпрд╣рд╛рдВ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИред

рдорд╛рддрд╛-рдкрд┐рддрд╛/рдмрдЪреНрдЪреЗ рдХрд╛ рд╕рдордп рдореБрджреНрджрд╛ рдирд╣реАрдВ рд╣реИред

рдПрдХ рдлрдВрдХреНрд╢рди рдХрдВрдкреЛрдиреЗрдВрдЯ_ рдХреЛ рд░реЗрдВрдбрд░ рдХрд░рддреЗ рд╕рдордп рдЕрдиреНрдп рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕ рдХреЛ рдХреНрдпреВрдЗрдВрдЧ рд╕реНрдЯреЗрдЯ рдЕрдкрдбреЗрдЯ _ рдореБрджреНрджрд╛ рд╣реИред

рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЗрд╕реЗ рдорд╛рддрд╛-рдкрд┐рддрд╛/рдмрдЪреНрдЪреЗ (рдпрд╛ рдкреЛрддреЗ) рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП: рдпрд╣ рд░рд╛рдЬреНрдп рд╕реЗрдЯрд░ рдХреЛ рдФрд░ рдХреИрд╕реЗ рдкрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рдерд╛?

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

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

рд╕рдордпред рдирд╣реАрдВред рдореБрджреНрджрд╛ред

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

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

рдпрд╣реА рдЪреЗрддрд╛рд╡рдиреА рдЖрдкрдХреЛ рдмрддрд╛ рд░рд╣реА рд╣реИред

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдХреИрд╕реЗ рд╕реНрдкрд╖реНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

рд╕рдордп рдореБрджреНрджрд╛ рдирд╣реАрдВ рд╣реИ: рддреБрдореНрд╣рд╛рд░рд╛ рдирд╣реАрдВ, рдореЗрд░рд╛ рдирд╣реАрдВред рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг, рдпрд╛ рдЙрд╕рдХреЗ рдЕрднрд╛рд╡ рдХреА рд╣реИред

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

рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдХреЛрдИ рдирд┐рдпрдо рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИред рдпрд╣ рд╣рдореЗрд╢рд╛ рдЧрд▓рдд рдкреИрдЯрд░реНрди рд░рд╣рд╛ рд╣реИред рдЗрд╕реЗ рдЕрднреА рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рддрд╛рдХрд┐ рдЖрдк рдЬрд╛рди рд╕рдХреЗрдВ рдХрд┐ рдЖрдкрдХрд╛ рдХреЛрдб рдЫреЛрдЯрд╛ рд╣реИред

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

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

рдирдорд╕реНрдХрд╛рд░ рджреЛрд╕реНрддреЛрдВ, рдереЛрдбрд╝рд╛ рд╢рд╛рдВрдд рд╣реЛ рдЬрд╛рдЗрдПред рдореИрдВ

@markerikson рдЖрдкрдХреЛ рдХреВрджрдиреЗ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЪрд░реНрдЪрд╛ рдереЛрдбрд╝реА рдЧрд░реНрдо рд╣реЛ рд░рд╣реА рд╣реИред

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

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

  • рдХрд┐ рдЖрдкрдХреЛ рд░реЗрдВрдбрд░ рдХреЗ рджреМрд░рд╛рди рд╕реЗрдЯрд╕реНрдЯреЗрдЯ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХрдХреНрд╖рд╛рдУрдВ рдиреЗ рд╣рдореЗрд╢рд╛ рдЪреЗрддрд╛рд╡рдиреА рджреА рд╣реИред

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

рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдорд╛рд░реА рдЪреВрдХ рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдШрдЯрдХ рдирд┐рдХрд╛рдп рдХреЗ рджреМрд░рд╛рди рдХрд┐рд╕реА рдЕрдиреНрдп рдШрдЯрдХ рдкрд░ рд╕реЗрдЯрд╕реНрдЯреЗрдЯ рдиреЗ рдкрд╣рд▓реЗ рдЪреЗрддрд╛рд╡рдиреА рдирд╣реАрдВ рджреА рдереАред рдЖрдк рдКрдкрд░ рдХреЗ рджреЛ рдмрд┐рдВрджреБрдУрдВ рд╕реЗ рдпрд╣ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдПрдХ рдЦрд░рд╛рдм рдкреИрдЯрд░реНрди рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╣рдирд╛ рдЙрдЪрд┐рдд рд╣реИ рдХрд┐ рдХреЛрдИ рдЗрд╕реЗ рдорд╣рд╕реВрд╕ рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ред рдЕрд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдЦреЗрдж рд╣реИ.

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

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

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

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

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

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

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

рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдХреБрдЫ рдорджрдж рдорд┐рд▓реЗрдЧреА!

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

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

рдореИрдВ рдЗрддрдиреЗ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдлрдВрдХреНрд╢рди рдмреИрдВрдбрд╡рд╛рдЧрди рдкрд░ рд╣реВрдВ (рд░реАрдХреЙрдореНрдкреЛрдЬ рдХреЗ рд╕рд╛рде рдХрдХреНрд╖рд╛рдУрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рд╣реБрдХ рд╕реЗ рдкрд╣рд▓реЗ рднреА) рдХрд┐ рдореБрдЭреЗ рдЙрди рдХреНрд▓рд╛рд╕ рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЛ рднреА рдпрд╛рдж рдирд╣реАрдВ рд╣реИред

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

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдХреЛрдИ рди рд╣реЛ , рд▓реЗрдХрд┐рди

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

рдлрд┐рд░ рднреА рдзрдиреНрдпрд╡рд╛рдж!

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

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

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

рдФрд░ рдЬрдм рдореИрдВ рдЖрдкрдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ "рдЕрдВрдЧреВрдареЗ рдХреЗ рдирд┐рдпрдо", рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢, рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдУрдВ рдЖрджрд┐ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рдерд╛

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

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдЕрднреА рднреА рдХреБрдЫ рдЧрд▓рддрдлрд╣рдореА рд╣реИред рд╕реНрдЯреЗрдЯ рд╕реЗрдЯрд░реНрд╕ рдХреЛ рдЪрд╛рдЗрд▓реНрдб рдХрдВрдкреЛрдиреЗрдВрдЯ рдореЗрдВ рдкрд╛рд╕ рдХрд░рдирд╛ рдмрд┐рд▓реНрдХреБрд▓ рдареАрдХ рд╣реИред рд╣рдореЗрд╢рд╛ рдареАрдХ рд░рд╣рд╛ рд╣реИ, рдФрд░ рд╣рдореЗрд╢рд╛ рд░рд╣реЗрдЧрд╛ред

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

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

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

рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдЕрдкрдбреЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ (рд╕рднреА рдХреЛ рдкрд┐рдВрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ), рдореИрдВрдиреЗ рд╕реБрдирд╛ https://github.com/final-form/react- final-form / 751#issuecomment -606212893 рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд╣рд▓ рдХрд┐рдпрд╛ рдЬреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рдереЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпред

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

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

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

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

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

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

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