рдкреВрд░реНрдг рдЙрдкрдпреЛрдЧ рдЧрд╛рдЗрдб

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


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

  • рдХреИрд╕реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП useEffect рдХрд╛ рдЙрдкрдпреЛрдЧ useEffect ?
  • рдЙрдкрдпреЛрдЧ рдХреЗ рдЕрдВрджрд░ рдбреЗрдЯрд╛ рдХреИрд╕реЗ рд▓реЛрдб рдХрд░реЗрдВ? [] рдХреНрдпрд╛ рд╣реИ?
  • рдХреНрдпрд╛ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?
  • рдбреЗрдЯрд╛ рдХреЛ рдЕрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдЕрдВрддрд╣реАрди рд▓реВрдк рдореЗрдВ рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрднреА-рдХрднреА рдХреНрдпреЛрдВ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ?
  • рдкреБрд░рд╛рдиреЗ рд░рд╛рдЬреНрдп рдХрднреА-рдХрднреА рдкреНрд░рднрд╛рд╡ рдХреЗ рдЕрдВрджрд░ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ рдпрд╛ рдкреБрд░рд╛рдиреЗ рдЧреБрдг рдкрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ?

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

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

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

"рдЖрдкрдХреЛ рд╕рд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рднреВрд▓ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП"


habr.com/ru/company/ruvds/blog/445276/


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

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

рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм


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

FfHow рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдШрдЯрдХрдбрд┐рдорд╛рдЙрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ?


рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ useEffect(fn, []) componentDidMount рдлрдВрдХреНрд╢рдирд▓рд┐рдЯреА рдЦреЗрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ componentDidMount рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реИред рдЕрд░реНрдерд╛рддреН, рдпрд╣ CompDidMount рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЧреБрдг рдФрд░ рд╕реНрдерд┐рддрд┐ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдХреЙрд▓рдмреИрдХ рдХреЗ рдЕрдВрджрд░ рднреА, рдЖрдк рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЧреБрдг рдФрд░ рд╕реНрдерд┐рддрд┐ рджреЗрдЦреЗрдВрдЧреЗред рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХрд╛ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕реЗ ref рд▓рд┐рдВрдХ рдореЗрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЖрдорддреМрд░ рдкрд░ рдХреЛрдб рдХреА рд╕рдВрд░рдЪрдирд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕рд░рд▓ рддрд░реАрдХрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдРрд╕рд╛ рдХрд░рдирд╛ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИред рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдорд╛рдирд╕рд┐рдХ рдкреНрд░рднрд╛рд╡ рдореЙрдбрд▓ componentDidMount рдФрд░ рдЕрдиреНрдп рдШрдЯрдХ рдЬреАрд╡рди рдЪрдХреНрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рд╕реЗ рдЕрд▓рдЧ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╕рдЯреАрдХ рд╕рдордХрдХреНрд╖реЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдЕрдЪреНрдЫреЗ рд╕реЗ рдЕрдзрд┐рдХ рдиреБрдХрд╕рд╛рди рдХрд░ рд╕рдХрддреА рд╣реИред рдЙрддреНрдкрд╛рджрдХ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ "рдкреНрд░рднрд╛рд╡реЛрдВ рдореЗрдВ рд╕реЛрдЪрдиреЗ" рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрдирдХреЗ рдорд╛рдирд╕рд┐рдХ рдореЙрдбрд▓ рдХрд╛ рдЖрдзрд╛рд░ рдШрдЯрдХреЛрдВ рдХреЗ рдЬреАрд╡рди рдЪрдХреНрд░ рдореЗрдВ рдШрдЯрдирд╛рдУрдВ рдХреЗ рдЬрд╡рд╛рдм рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдХрд░реАрдм рд╣реИред

рдЙрдкрдпреЛрдЧ рдХреЗ рдЕрдВрджрд░ рдбреЗрдЯрд╛ рдХреЛ рдареАрдХ рд╕реЗ рдХреИрд╕реЗ рд▓реЛрдб рдХрд░реЗрдВ? [] рдХреНрдпрд╛ рд╣реИ?


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

Depend рдХреНрдпрд╛ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?


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

End рдбреЗрдЯрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдЕрдВрддрд╣реАрди рд▓реВрдк рдореЗрдВ рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрднреА-рдХрднреА рдХреНрдпреЛрдВ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ?


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

Or рдХрднреА-рдХрднреА рдкреБрд░рд╛рдиреЗ рд░рд╛рдЬреНрдп рдкреНрд░рднрд╛рд╡ рдХреЗ рдЕрдВрджрд░ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ рдпрд╛ рдкреБрд░рд╛рдиреЗ рдЧреБрдг рдкрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ?


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

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

рдкреНрд░рддреНрдпреЗрдХ рд░реЗрдВрдбрд░ рдХреЗ рдЕрдкрдиреЗ рдЧреБрдг рдФрд░ рдЕрд╡рд╕реНрдерд╛ рд╣реЛрддреА рд╣реИред


рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рдкреНрд░рднрд╛рд╡реЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░ рд╕рдХреЗрдВ, рд╣рдореЗрдВ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреА рд╣реЛрдЧреАред

рдпрд╣рд╛рдБ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдХрд╛рдЙрдВрдЯрд░ рдШрдЯрдХ рд╣реИред

 function Counter() { const [count, setCount] = useState(0); return (   <div>     <p>You clicked {count} times</p>     <button onClick={() => setCount(count + 1)}>       Click me     </button>   </div> ); } 

<p>You clicked {count} times</p> ред рдЙрд╕рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ? рдХреНрдпрд╛ рд░рд╛рдЬреНрдп рдореЗрдВ рд▓рдЧрд╛рддрд╛рд░ рдХрд┐рд╕реА рднреА рддрд░рд╣ "рдирд┐рд░реАрдХреНрд╖рдг" рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдХреНрдпрд╛ рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ? рдЗрд╕ рдирд┐рд╖реНрдХрд░реНрд╖ рдХреЛ рдХрд┐рд╕реА рдРрд╕реЗ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдореВрд▓реНрдпрд╡рд╛рди рдкрд╣рд▓реЗ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рд░рд┐рдПрдХреНрдЯ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд╣реА рдорд╛рдирд╕рд┐рдХ рдореЙрдбрд▓ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред

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

 const count = 42; // ... <p>You clicked {count} times</p> // ... 

рдкрд╣рд▓реЗ рдШрдЯрдХ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рджреМрд░рд╛рди, useState() рд╕реЗ рдкреНрд░рд╛рдкреНрдд count рдорд╛рди 0. рд╣реИред рдЬрдм рд╣рдо setCount(1) рдХрд╣рддреЗ рд╣реИрдВ, рддреЛ рд░рд┐рдПрдХреНрдЯ рдШрдЯрдХ рдХреЛ рдлрд┐рд░ рд╕реЗ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдмрд╛рд░ рдХреА count 1 рд╣реЛрдЧреАред рдФрд░ рдЗрддрдиреЗ рдкрд░:

 //     function Counter() { const count = 0; //  useState() // ... <p>You clicked {count} times</p> // ... } //       function Counter() { const count = 1; //  useState() // ... <p>You clicked {count} times</p> // ... } //        function Counter() { const count = 2; //  useState() // ... <p>You clicked {count} times</p> // ... } 

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

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдпрд╣ рд░реЗрдЦрд╛ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рдбреЗрдЯрд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдСрдкрд░реЗрд╢рди рдирд╣реАрдВ рдХрд░рддреА рд╣реИ:

 <p>You clicked {count} times</p> 

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

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

рдЗрд╕ рд╕рд╛рдордЧреНрд░реА рдореЗрдВ рдЖрдк рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╡рд░рдг рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдкреНрд░рддреНрдпреЗрдХ рд░реЗрдВрдбрд░ рдХрд╛ рдЕрдкрдирд╛ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рд╣реЛрддрд╛ рд╣реИред


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

 function Counter() { const [count, setCount] = useState(0); function handleAlertClick() {   setTimeout(() => {     alert('You clicked on: ' + count);   }, 3000); } return (   <div>     <p>You clicked {count} times</p>     <button onClick={() => setCount(count + 1)}>       Click me     </button>     <button onClick={handleAlertClick}>       Show alert     </button>   </div> ); } 

рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдореИрдВ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреНрд░рдо рдХрд░рддрд╛ рд╣реВрдВ:

  • рдореИрдВ рдХреНрд▓рд┐рдХ Click me рдмрдЯрди рдкрд░ Click me рдХрд░рдХреЗ count рдХрд╛ рдорд╛рди 3 рддрдХ рд▓рд╛рдКрдВрдЧрд╛ред
  • Show alert рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред
  • рд╕рдордп рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдорд╛рди рдмрдврд╝рд╛рдХрд░ 5 рдХрд░реЗрдВред


рд╢реЛ рдЕрд▓рд░реНрдЯ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЧрд┐рдирддреА рдореВрд▓реНрдп рдмрдврд╝рд╛рдирд╛

рдЖрдкрдХреЛ рдХреНрдпрд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдВрджреЗрд╢ рдмреЙрдХреНрд╕ рдореЗрдВ рдХреНрдпрд╛ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ? рдХреНрдпрд╛ 5 рдХреЛ рд╡рд╣рд╛рдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдЙрд╕ рд╕рдордп рдХреЗ рдорд╛рди рдХреЛ count , рдЬрд┐рд╕ рд╕рдордп рдЯрд╛рдЗрдорд░ рдЯреНрд░рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдпрд╛ 3 - рдпрд╛рдиреА, рдмрдЯрди рджрдмрд╛рдП рдЬрд╛рдиреЗ рдХреЗ рд╕рдордп рдХреА count рдореВрд▓реНрдп?

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

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

рдЬрд┐рд╕ рд╕рдордп рдмрдЯрди рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрджреЗрд╢ рдмреЙрдХреНрд╕ "рдХреИрдкреНрдЪрд░" рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХрд╛ рддрдВрддреНрд░ред

рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рджреВрд╕рд░реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдм рд╣рдо рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдорд╛рдирдХ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реЗ рдирд┐рдкрдЯреЗрдВрдЧреЗред рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпреЛрдВ рдХреЗ рдорд╛рдирд╕рд┐рдХ рдореЙрдбрд▓ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╕рдордп, "рдЖрдкрд╛рддрдХрд╛рд▓реАрди рдирд┐рдХрд╛рд╕" рдХреЗ рд╕рднреА рдкреНрд░рдХрд╛рд░ рд╕реЗ "рдХрдо рд╕реЗ рдХрдо рдкреНрд░рддрд┐рд░реЛрдз рдХреЗ рдорд╛рд░реНрдЧ" рдХреЛ рднреЗрдж рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

рдпрд╣ рд╕рдм рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?

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

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

 function sayHi(person) { const name = person.name; setTimeout(() => {   alert('Hello, ' + name); }, 3000); } let someone = {name: 'Dan'}; sayHi(someone); someone = {name: 'Yuzhi'}; sayHi(someone); someone = {name: 'Dominic'}; sayHi(someone); 

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдмрд╛рд╣рд░реА рдЪрд░ someone рдХрдИ рдмрд╛рд░ рдкреБрди: рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣реА рдмрд╛рдд рд░рд┐рдПрдХреНрдЯ рдХреЗ рдЕрдВрджрд░ рдХрд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдШрдЯрдХ рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдмрджрд▓ рд╕рдХрддреА рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, sayHi рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдПрдХ рд╕реНрдерд╛рдиреАрдп рд╕реНрдерд┐рд░ name рдЬреЛ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдХреЙрд▓ рдХреЗ person рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред рдпрд╣ рдирд┐рд░рдВрддрд░ рд╕реНрдерд╛рдиреАрдп рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдореЗрдВ рдЗрд╕рдХреЗ рдорд╛рди рдПрдХ-рджреВрд╕рд░реЗ рд╕реЗ рдЕрд▓рдЧ-рдерд▓рдЧ рд╣реИрдВ! рдирддреАрдЬрддрди, рд╕рдордп рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╕рдВрджреЗрд╢ рд╡рд┐рдВрдбреЛ рдХрд╛ рдЕрдкрдирд╛ name рдорд╛рди "рдпрд╛рдж" рд╣реЛрддрд╛ рд╣реИред

рдпрд╣ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЬрдм рдПрдХ рдмрдЯрди рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рд╣рдорд╛рд░рд╛ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ count рдорд╛рди рдХреЛ рдХреИрд╕реЗ рдкрдХрдбрд╝рддрд╛ рд╣реИред рдпрджрд┐ рд╣рдо рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рдорд╛рди рд╕рд┐рджреНрдзрд╛рдВрдд рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ count рдореВрд▓реНрдп рдХреЛ "рджреЗрдЦрддрд╛ рд╣реИ":

 //     function Counter() { const count = 0; //  useState() // ... function handleAlertClick() {   setTimeout(() => {     alert('You clicked on: ' + count);   }, 3000); } // ... } //       function Counter() { const count = 1; //  useState() // ... function handleAlertClick() {   setTimeout(() => {     alert('You clicked on: ' + count);   }, 3000); } // ... } //        function Counter() { const count = 2; //  useState() // ... function handleAlertClick() {   setTimeout(() => {     alert('You clicked on: ' + count);   }, 3000); } // ... } 

рдирддреАрдЬрддрди, рдкреНрд░рддреНрдпреЗрдХ рд░реЗрдВрдбрд░, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ "рд╕рдВрд╕реНрдХрд░рдг" handleAlertClick ред рдЗрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХрд╛ "рдЕрдкрдиреА count рдореВрд▓реНрдп" рдпрд╛рдж рд╣реИ:

 //     function Counter() { // ... function handleAlertClick() {   setTimeout(() => {     alert('You clicked on: ' + 0);   }, 3000); } // ... <button onClick={handleAlertClick} /> // ,   0 // ... } //       function Counter() { // ... function handleAlertClick() {   setTimeout(() => {     alert('You clicked on: ' + 1);   }, 3000); } // ... <button onClick={handleAlertClick} /> // ,   1 // ... } //        function Counter() { // ... function handleAlertClick() {   setTimeout(() => {     alert('You clicked on: ' + 2);   }, 3000); } // ... <button onClick={handleAlertClick} /> // ,   2 // ... } 

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

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

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

рдкреНрд░рддреНрдпреЗрдХ рд░реЗрдВрдбрд░ рдХрд╛ рдЕрдкрдирд╛ рдкреНрд░рднрд╛рд╡ рд╣реЛрддрд╛ рд╣реИред


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

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

 function Counter() { const [count, setCount] = useState(0); useEffect(() => {   document.title = `You clicked ${count} times`; }); return (   <div>     <p>You clicked {count} times</p>     <button onClick={() => setCount(count + 1)}>       Click me     </button>   </div> ); } 

рдЕрдм рдореЗрд░реЗ рдкрд╛рд╕ рдЖрдкрдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рд╢реНрди рд╣реИред рдПрдХ рдкреНрд░рднрд╛рд╡ рд╕рдмрд╕реЗ рд╣рд╛рд▓ рдХреЗ count рдореВрд▓реНрдп рдХреЛ рдХреИрд╕реЗ рдкрдврд╝рддрд╛ рд╣реИ?

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

рдирд╣реАрдВред

рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдШрдЯрдХ рдХреЗ рдкреНрд░рддрд┐рдкрд╛рджрди рдореЗрдВ, count рдПрдХ рд╕реНрдерд┐рд░ рд╣реИред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рднреА "рд╡реИрд▓реНрдпреВ" рдХреЛ рдЙрд╕ рд░реЗрдВрдбрд░ рд╕реЗ count рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╡реЗ "рд╕рдВрдмрдВрдзрд┐рдд" рд╣реИрдВ, рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ count рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рджрд╛рдпрд░реЗ рдореЗрдВ рд╕реНрдерд┐рдд рдПрдХ рд╕реНрдерд┐рд░ рд╣реИред рдкреНрд░рднрд╛рд╡реЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдпрд╣реА рд╕рдЪ рд╣реИ!

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

рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрд╕реНрдХрд░рдг "рджреЗрдЦрддрд╛ рд╣реИ" рдХрд┐ рдпрд╣ "рд╕рдВрдмрдВрдзрд┐рдд" рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП count рдореВрд▓реНрдп:

 //     function Counter() { // ... useEffect(   //        () => {     document.title = `You clicked ${0} times`;   } ); // ... } //       function Counter() { // ... useEffect(   //        () => {     document.title = `You clicked ${1} times`;   } ); // ... } //        function Counter() { // ... useEffect(   //        () => {     document.title = `You clicked ${2} times`;   } ); // .. } 

React , DOM .

, ( ), , , , ┬л┬╗ , ┬л┬╗.

, , .

, ( , ). , , , .

, , :

React:

  • , 0.

:

  • : <p>You clicked 0 times</p> .
  • , , : () => { document.title = 'You clicked 0 times' } .

React:

  • . . , , - DOM.

:

  • , .

React:

  • , , .
  • () => { document.title = 'You clicked 0 times' } .

, . , , - :

:

  • , React, 1.

React:

  • , 1.

:

  • : <p>You clicked 1 times</p> .
  • , , : () => { document.title = 'You clicked 1 times' } .

React:

  • . . , , - DOM.

:

  • , .

React:

  • , , .
  • () => { document.title = 'You clicked 1 times' } .

тАж


, , , , ┬л┬╗ .

. :

 function Counter() { const [count, setCount] = useState(0); useEffect(() => {   setTimeout(() => {     console.log(`You clicked ${count} times`);   }, 3000); }); return (   <div>     <p>You clicked {count} times</p>     <button onClick={() => setCount(count + 1)}>       Click me     </button>   </div> ); } 

, ?

, . , , , . ! , , , , , count . .




: ┬л, ! ?┬╗.

, , this.setState , , . , , , , , :

   componentDidUpdate() {   setTimeout(() => {     console.log(`You clicked ${this.state.count} times`);   }, 3000); } 

, this.state.count count , , . , , , 5 , 5 .




, JavaScript-, , , , , setTimeout , . , (React this.state , ), .

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


, ( , , - API ) , .

:

 function Example(props) { useEffect(() => {   setTimeout(() => {     console.log(props.counter);   }, 1000); }); // ... } function Example(props) { const counter = props.counter; useEffect(() => {   setTimeout(() => {     console.log(counter);   }, 1000); }); // ... } 

, ┬л┬╗ . ! . , .

, , - , , , , . , ref , .

, , , , , . , ( ), ┬л┬╗ React-. , , . , .

, , , :

 function Example() { const [count, setCount] = useState(0); const latestCount = useRef(count); useEffect(() => {   //        count   latestCount.current = count;   setTimeout(() => {     //            console.log(`You clicked ${latestCount.current} times`);   }, 3000); }); // ... 




- React . React this.state . , , latestCount.current . , . , , , .

?


, . , , ┬л┬╗ .

:

 useEffect(() => {   ChatAPI.subscribeToFriendStatus(props.id, handleStatusChange);   return () => {     ChatAPI.unsubscribeFromFriendStatus(props.id, handleStatusChange);   }; }); 

, props тАФ {id: 10} , {id: 20} тАФ . , :

  • React {id: 10} .
  • React {id: 20} .
  • React {id: 20} .

( , , .)

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

React , . , . . . :

  • React {id: 20} .
  • . {id: 20} .
  • React {id: 10} .
  • React {id: 20} .

, ┬л┬╗ props , {id: 10} , , props {id: 20} .

, тАж


тАФ ?

: ┬л ( , , - API ) , ┬╗.

! ┬л ┬╗ , . , , :

 //  ,  props  {id: 10} function Example() { // ... useEffect(   //       () => {     ChatAPI.subscribeToFriendStatus(10, handleStatusChange);     //           return () => {       ChatAPI.unsubscribeFromFriendStatus(10, handleStatusChange);     };   } ); // ... } //  ,  props  {id: 20} function Example() { // ... useEffect(   //       () => {     ChatAPI.subscribeToFriendStatus(20, handleStatusChange);     //           return () => {       ChatAPI.unsubscribeFromFriendStatus(20, handleStatusChange);     };   } ); // ... } 

, , тАж , ┬л┬╗ , -, {id: 10} .

React . , , . props , .

,


React , . .

, :

 function Greeting({ name }) { return (   <h1 className="Greeting">     Hello, {name}   </h1> ); } 

, <Greeting name="Dan" /> , тАФ <Greeting name="Yuzhi" /> , <Greeting name="Yuzhi" /> . Hello, Yuzhi .

, , . React, . , , . $.addClass $.removeClass jQuery- ( тАФ , ┬л┬╗), , CSS- React ( тАФ , ┬л┬╗).

React DOM , . ┬л┬╗ ┬л┬╗.

. useEffect , React, .

 function Greeting({ name }) { useEffect(() => {   document.title = 'Hello, ' + name; }); return (   <h1 className="Greeting">     Hello, {name}   </h1> ); } 

useEffect , , . , - , ! , ┬л┬╗, ┬л┬╗.

, A , B , тАФ C , , C . (, - ), .

, , , . ( ).

?

React


React DOM. DOM , React DOM, - .

, :

 <h1 className="Greeting"> Hello, Dan </h1> 

:

 <h1 className="Greeting"> Hello, Yuzhi </h1> 

React :

 const oldProps = {className: 'Greeting', children: 'Hello, Dan'}; const newProps = {className: 'Greeting', children: 'Hello, Yuzhi'}; 

React , children , DOM. , className . :

 domNode.innerText = 'Hello, Yuzhi'; // domNode.className    

- ? , , .

, , - :

 function Greeting({ name }) { const [counter, setCounter] = useState(0); useEffect(() => {   document.title = 'Hello, ' + name; }); return (   <h1 className="Greeting">     Hello, {name}     <button onClick={() => setCounter(counter + 1)}>       Increment     </button>   </h1> ); } 

counter . document.title name , name . document.title counter , .

React тАж ?

 let oldEffect = () => { document.title = 'Hello, Dan'; }; let newEffect = () => { document.title = 'Hello, Dan'; }; //   React  ,        ? 

тАФ . React , , . ( . name .)

, , ( deps ), useEffect :

   useEffect(() => {   document.title = 'Hello, ' + name; }, [name]); //   

, React: ┬л, , , , name ┬╗.

, , React :

 const oldEffect = () => { document.title = 'Hello, Dan'; }; const oldDeps = ['Dan']; const newEffect = () => { document.title = 'Hello, Dan'; }; const newDeps = ['Dan']; // React     ,     . //      ,     . 

, , ! - - .

React


React тАФ . , , , , useEffect , , , . ( !)

 function SearchResults() { async function fetchData() {   // ... } useEffect(() => {   fetchData(); }, []); //   ?  .      . // ... } 

FAQ , . .

┬л !┬╗, тАФ . : , , . , , , тАФ , .

, , . , , , , . , . .

, , .

, React


, , React , .

   useEffect(() => {   document.title = 'Hello, ' + name; }, [name]); 


тАФ

, , , [] , , , , :

   useEffect(() => {   document.title = 'Hello, ' + name; }, []); // :    name 


тАФ

. , ┬л┬╗ , , .

, , , . , : ┬л setInterval clearInterval ┬╗. . , , , useEffect , , , [] . - , ?

 function Counter() { const [count, setCount] = useState(0); useEffect(() => {   const id = setInterval(() => {     setCount(count + 1);   }, 1000);   return () => clearInterval(id); }, []); return <h1>{count}</h1>; } 

, , .

, ┬л , ┬╗, . , , , setInterval , . , ?

, тАФ React , , . , count , React , , , . тАФ .

count 0. setCount(count + 1) setCount(0 + 1) . , тАФ [] , setCount(0 + 1) :

 //  ,   0 function Counter() { // ... useEffect(   //       () => {     const id = setInterval(() => {       setCount(0 + 1); //  setCount(1)     }, 1000);     return () => clearInterval(id);   },   [] //    ); // ... } //       1 function Counter() { // ... useEffect(   //     - ,    //   React  ,   .   () => {     const id = setInterval(() => {       setCount(1 + 1);     }, 1000);     return () => clearInterval(id);   },   [] ); // ... } 

React, , , тАФ .

count тАФ , ( ):

   const count = // ... useEffect(() => {   const id = setInterval(() => {     setCount(count + 1);   }, 1000);   return () => clearInterval(id); }, []); 

. React .


,

. , , React , , . тАФ - .


React , . , , , .

, , , . count :

 useEffect(() => { const id = setInterval(() => {   setCount(count + 1); }, 1000); return () => clearInterval(id); }, [count]); 

. , , тАФ , . count , count , setCount(count + 1) :

 //  ,   0 function Counter() { // ... useEffect(   //       () => {     const id = setInterval(() => {       setCount(0 + 1); // setCount(count + 1)     }, 1000);     return () => clearInterval(id);   },   [0] // [count] ); // ... } //  ,   1 function Counter() { // ... useEffect(   //       () => {     const id = setInterval(() => {       setCount(1 + 1); // setCount(count + 1)     }, 1000);     return () => clearInterval(id);   },   [1] // [count] ); // ... } 

, setInterval , count , . , .


,

, , , . тАФ , .

.


, count .

 useEffect(() => {   const id = setInterval(() => {     setCount(count + 1);   }, 1000);   return () => clearInterval(id); }, [count]); 

, , count . , count setCount . , , count . , , setState :

   useEffect(() => {   const id = setInterval(() => {     setCount(c => c + 1);   }, 1000);   return () => clearInterval(id); }, []); 

┬л ┬╗. , count - , setCount(count + 1) . count - , count + 1 ┬л┬╗ React. React count . , React тАФ , , , .

setCount(c => c + 1) . ┬л React ┬╗, , . ┬л ┬╗ , , .

, , , . React. count :


,

.

, setInterval , , c => c + 1 . count . React .

Google Docs


, , тАФ ? , , ┬л┬╗, , . , Google Docs . . , .

, . . , setCount(c => c + 1) , , setCount(count + 1) , ┬л┬╗ count . , ( тАФ ┬л┬╗). ┬л React┬╗ тАФ . .

( ) , Google Docs . тАФ , React . , , ( , , ) .

, setCount(c => c + 1) , . , . , , , , , . setCount(c => c + 1) . useReducer .


, : count step . setInterval , step :

 function Counter() { const [count, setCount] = useState(0); const [step, setStep] = useState(1); useEffect(() => {   const id = setInterval(() => {     setCount(c => c + step);   }, 1000);   return () => clearInterval(id); }, [step]); return (   <>     <h1>{count}</h1>     <input value={step} onChange={e => setStep(Number(e.target.value))} />   </> ); } 

.

, React . step , . .

: step setInterval тАФ step . , , , ! , , , , , .

, , , setInterval , step . step ?

, , useReducer .

, setSomething(something => ...) , , . ┬л┬╗, , , .

step dispatch :

 const [state, dispatch] = useReducer(reducer, initialState); const { count, step } = state; useEffect(() => { const id = setInterval(() => {   dispatch({ type: 'tick' }); //  setCount(c => c + step); }, 1000); return () => clearInterval(id); }, [dispatch]); 

.

: ┬л , ?┬╗. , React , dispatch . .

!

( dispatch setstate useRef , React , . тАФ .)

, , , , . step . , . , . :

 const initialState = { count: 0, step: 1, }; function reducer(state, action) { const { count, step } = state; if (action.type === 'tick') {   return { count: count + step, step }; } else if (action.type === 'step') {   return { count, step: action.step }; } else {   throw new Error(); } } 

, , , .

useReducer тАФ -


, , , . , , ? , , API <Counter step={1} /> . , props.step ?

, ! , :

 function Counter({ step }) { const [count, dispatch] = useReducer(reducer, 0); function reducer(state, action) {   if (action.type === 'tick') {     return state + step;   } else {     throw new Error();   } } useEffect(() => {   const id = setInterval(() => {     dispatch({ type: 'tick' });   }, 1000);   return () => clearInterval(id); }, [dispatch]); return <h1>{count}</h1>; } 

, . , , , , . .

dispatch . , , . .

, , . ┬л┬╗ , , ? , dispatch , React . . .

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


, - , .

, , , :

 function SearchResults() { const [data, setData] = useState({ hits: [] }); async function fetchData() {   const result = await axios(     'https://hn.algolia.com/api/v1/search?query=react',   );   setData(result.data); } useEffect(() => {   fetchData(); }, []); //   ? // ... 

, .

, , . , , , , , , , , .

, , , , :

 function SearchResults() { // ,       function getFetchUrl() {   return 'https://hn.algolia.com/api/v1/search?query=react'; } // ,        async function fetchData() {   const result = await axios(getFetchUrl());   setData(result.data); } useEffect(() => {   fetchData(); }, []); // ... } 

, , :

 function SearchResults() { const [query, setQuery] = useState('react'); // ,       function getFetchUrl() {   return 'https://hn.algolia.com/api/v1/search?query=' + query; } // ,        async function fetchData() {   const result = await axios(getFetchUrl());   setData(result.data); } useEffect(() => {   fetchData(); }, []); // ... } 

, (, ), . .

, . , :

 function SearchResults() { // ... useEffect(() => {   //      !   function getFetchUrl() {     return 'https://hn.algolia.com/api/v1/search?query=react';   }   async function fetchData() {     const result = await axios(getFetchUrl());     setData(result.data);   }   fetchData(); }, []); //    . // ... } 

.

? , ┬л ┬╗. React, - .

getFetchUrl , query , , , , . тАФ , query :

 function SearchResults() { const [query, setQuery] = useState('react'); useEffect(() => {   function getFetchUrl() {     return 'https://hn.algolia.com/api/v1/search?query=' + query;   }   async function fetchData() {     const result = await axios(getFetchUrl());     setData(result.data);   }   fetchData(); }, [query]); //    . // ... } 

.

, ┬л React┬╗. query . , , , , . , , .

exhaustive-deps eslint-plugin-react-hooks , . , , .




.

, ?


. , , . , , .

? , . : React . . , ┬л ┬╗. , , . , , , !

, , . , getFetchUrl :

 function SearchResults() { function getFetchUrl(query) {   return 'https://hn.algolia.com/api/v1/search?query=' + query; } useEffect(() => {   const url = getFetchUrl('react');   // ...    -   ... }, []); //  : getFetchUrl useEffect(() => {   const url = getFetchUrl('redux');   // ...    -   ... }, []); //  : getFetchUrl // ... } 

getFetchUrl тАФ , .

, ┬л┬╗ , . getFetchUrl (, , ), :

 function SearchResults() { //       function getFetchUrl(query) {   return 'https://hn.algolia.com/api/v1/search?query=' + query; } useEffect(() => {   const url = getFetchUrl('react');   // ...    -    ... }, [getFetchUrl]); //   ,     . useEffect(() => {   const url = getFetchUrl('redux');   // ...    -   ... }, [getFetchUrl]); //   ,     . // ... } 

, getFetchUrl . , тАФ . - , , . , , , .

тАФ .

, , :

 //        function getFetchUrl(query) { return 'https://hn.algolia.com/api/v1/search?query=' + query; } function SearchResults() { useEffect(() => {   const url = getFetchUrl('react');   // ...    -   ... }, []); //     . useEffect(() => {   const url = getFetchUrl('redux');   // ...    -   ... }, []); //     . // ... } 

, . , , .

. , useCallback :

 function SearchResults() { //    ,   const getFetchUrl = useCallback((query) => {   return 'https://hn.algolia.com/api/v1/search?query=' + query; }, []);  //      . useEffect(() => {   const url = getFetchUrl('react');   // ...    -   ... }, [getFetchUrl]); //      . useEffect(() => {   const url = getFetchUrl('redux');   // ...    -   ... }, [getFetchUrl]); //       // ... } 

useCallback . : , -, , , .

, . ( 'react' 'redux' ). , , , query . , , query , getFetchUrl .

, query useCallback :

 function SearchResults() { const [query, setQuery] = useState('react'); const getFetchUrl = useCallback(() => { //   query   return 'https://hn.algolia.com/api/v1/search?query=' + query; }, []); //  : query // ... } 

useCallback query , , getFetchUrl , query :

 function SearchResults() { const [query, setQuery] = useState('react'); //      query const getFetchUrl = useCallback(() => {   return 'https://hn.algolia.com/api/v1/search?query=' + query; }, [query]);  //    . useEffect(() => {   const url = getFetchUrl();   // ...    -   ... }, [getFetchUrl]); //    . // ... } 

useCallback , query , getFetchUrl , , . query , getFetchUrl , . Excel: - , , , .

тАФ , . , :

 function Parent() { const [query, setQuery] = useState('react'); //      query const fetchData = useCallback(() => {   const url = 'https://hn.algolia.com/api/v1/search?query=' + query;   // ...      ... }, [query]);  //       return <Child fetchData={fetchData} /> } function Child({ fetchData }) { let [data, setData] = useState(null); useEffect(() => {   fetchData().then(setData); }, [fetchData]); //       // ... } 

fetchData Parent query , Child , .

?


, , , , . , , , , :

 class Parent extends Component { state = {   query: 'react' }; fetchData = () => {   const url = 'https://hn.algolia.com/api/v1/search?query=' + this.state.query;   // ...    -   ... }; render() {   return <Child fetchData={this.fetchData} />; } } class Child extends Component { state = {   data: null }; componentDidMount() {   this.props.fetchData(); } render() {   // ... } } 

, : ┬л , , , useEffect тАФ componentDidMount componentDidUpdate . !┬╗. componentDidUpdate :

 class Child extends Component { state = {   data: null }; componentDidMount() {   this.props.fetchData(); } componentDidUpdate(prevProps) {   //         if (this.props.fetchData !== prevProps.fetchData) {     this.props.fetchData();   } } render() {   // ... } } 

, fetchData тАФ ! (, , , .) - , . this.props.fetchData prevProps.fetchData . , , ?

   componentDidUpdate(prevProps) {   this.props.fetchData(); } 

. . ( .) , fetchData this.state.query ?

   render() {   return <Child fetchData={this.fetchData.bind(this, this.state.query)} />; } 

this.props.fetchData !== prevProps.fetchData true , , query ! .

, , , query Child . , , query , query :

 class Parent extends Component { state = {   query: 'react' }; fetchData = () => {   const url = 'https://hn.algolia.com/api/v1/search?query=' + this.state.query;   // ...    -    ... }; render() {   return <Child fetchData={this.fetchData} query={this.state.query} />; } } class Child extends Component { state = {   data: null }; componentDidMount() {   this.props.fetchData(); } componentDidUpdate(prevProps) {   if (this.props.query !== prevProps.query) {     this.props.fetchData();   } } render() {   // ... } } 

, , - , , .

, , . this , . , , , , - . , this.props.fetchData , , , , , .

- useCallback . , , , . , . useCallback props.fetchData .

, useMemo :

 function ColorPicker() { //         Child, //       . const [color, setColor] = useState('pink'); const style = useMemo(() => ({ color }), [color]); return <Child style={style} />; } 

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

, fetchData ( ), . , , . (┬л props.onComplete , ?┬╗) , .


, :

 class Article extends Component { state = {   article: null }; componentDidMount() {   this.fetchData(this.props.id); } async fetchData(id) {   const article = await API.fetchArticle(id);   this.setState({ article }); } // ... } 

, , , . . тАФ , :

 class Article extends Component { state = {   article: null }; componentDidMount() {   this.fetchData(this.props.id); } componentDidUpdate(prevProps) {   if (prevProps.id !== this.props.id) {     this.fetchData(this.props.id);   } } async fetchData(id) {   const article = await API.fetchArticle(id);   this.setState({ article }); } // ... } 

, , , . , . , {id: 10} , {id: 20} , , . , , , . рдФрд░ рдпрд╣ рдЧрд▓рдд рд╣реИред

, , . тАФ , , async/await ( , - ) , ( , ).

, async -. (, , , , .)

, , ! .

, :

 function Article({ id }) { const [article, setArticle] = useState(null); useEffect(() => {   let didCancel = false;   async function fetchData() {     const article = await API.fetchArticle(id);     if (!didCancel) {       setArticle(article);     }   }   fetchData();   return () => {     didCancel = true;   }; }, [id]); // ... } 

, , , . , .


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

useEffect , , , . React. , useEffect .

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

, useEffect , . тАФ . тАФ , , тАФ , . , , , , API.

, , useFetch , , useTheme , . , , useEffect . , , , .

, , useEffect . тАФ , . , . ?

Suspense React , , - ( : , , ) .

Suspense , , useEffect , , , - . , , , . , , , , .

рдкрд░рд┐рдгрд╛рдо


, . , , - , , , .

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


All Articles