рдЖрдкрдиреЗ
рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдХрдИ рдШрдЯрдХ рд▓рд┐рдЦреЗ
рд╣реИрдВ ред рд╢рд╛рдпрдж - рдЙрдиреНрд╣реЛрдВрдиреЗ рдПрдХ рдЫреЛрдЯрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рднреА рдмрдирд╛рдпрд╛ред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЖрдк рдкрд░рд┐рдгрд╛рдо рд╕реЗ рдХрд╛рдлреА рдЦреБрд╢ рд╣реИрдВред рдЖрдк рдПрдкреАрдЖрдИ рдХреЗ рдЖрджреА рд╣реИрдВ рдФрд░ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХреБрдЫ рдЕрдЬреНрдЮрд╛рдд рдЙрдкрдпреЛрдЧреА рдЯреНрд░рд┐рдХреНрд╕ рдорд┐рд▓реЗред рдЖрдкрдиреЗ
рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХреБрдЫ
рд╣реБрдХ рднреА рдмрдирд╛рдП рдФрд░ рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ 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;
рдкрд╣рд▓реЗ рдШрдЯрдХ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рджреМрд░рд╛рди,
useState()
рд╕реЗ рдкреНрд░рд╛рдкреНрдд
count
рдорд╛рди 0. рд╣реИред рдЬрдм рд╣рдо
setCount(1)
рдХрд╣рддреЗ рд╣реИрдВ, рддреЛ рд░рд┐рдПрдХреНрдЯ рдШрдЯрдХ рдХреЛ рдлрд┐рд░ рд╕реЗ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдмрд╛рд░ рдХреА
count
1 рд╣реЛрдЧреАред рдФрд░ рдЗрддрдиреЗ рдкрд░:
рдЬрдм рднреА рд╣рдо рд╕реНрдЯреЗрдЯ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд░рд┐рдПрдХреНрдЯ рдШрдЯрдХ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред рдирддреАрдЬрддрди, рдкреНрд░рддреНрдпреЗрдХ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдСрдкрд░реЗрд╢рди
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
рдореВрд▓реНрдп рдХреЛ "рджреЗрдЦрддрд╛ рд╣реИ":
рдирддреАрдЬрддрди, рдкреНрд░рддреНрдпреЗрдХ рд░реЗрдВрдбрд░, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ "рд╕рдВрд╕реНрдХрд░рдг"
handleAlertClick
ред рдЗрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХрд╛ "рдЕрдкрдиреА
count
рдореВрд▓реНрдп" рдпрд╛рдж рд╣реИ:
рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░реЗрдВрдбрд░рд░реНрд╕ рд╕реЗ "рд╕рдВрдмрдВрдзрд┐рдд" рд╣реИрдВ, рдФрд░ рдЬрдм рдЖрдк рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдШрдЯрдХ рдЗрди рд░реЗрдВрдбрд░рд░реНрд╕ рд╕реЗ
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
рдореВрд▓реНрдп:
React , DOM .
, ( ), , , , ┬л┬╗ , ┬л┬╗.
, , .
, ( ,
). , , , .
, , :
React:
:
- :
<p>You clicked 0 times</p>
. - , , :
() => { document.title = 'You clicked 0 times' }
.
React:
:
React:
- , , .
() => { document.title = 'You clicked 0 times' }
.
, . , , - :
:
React:
:
- :
<p>You clicked 1 times</p>
. - , , :
() => { document.title = 'You clicked 1 times' }
.
React:
:
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); });
, ┬л┬╗ . ! . , .
, , - , , , , . ,
ref
,
.
, , , , , . , ( ), ┬л┬╗ React-. , , . , .
, , , :
function Example() { const [count, setCount] = useState(0); const latestCount = useRef(count); useEffect(() => {
- 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 ) , ┬╗.
! ┬л ┬╗ , . , , :
, , тАж , ┬л┬╗ , -,
{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';
- ? , , .
, , - :
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 , , . ( .
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 тАФ . , , , ,
useEffect
, , , . ( !)
function SearchResults() { async function fetchData() {
FAQ , . .
┬л !┬╗, тАФ . : , , . , , , тАФ , .
, , . , , , , . , . .
, , .
, React
, , React , .
useEffect(() => { document.title = 'Hello, ' + name; }, [name]);
тАФ, , ,
[]
, , , , :
useEffect(() => { document.title = 'Hello, ' + 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)
:
React, , , тАФ .
count
тАФ , ( ):
const count =
. React .
,. , , React , , . тАФ
- .
React , . , , , .
, , , .
count
:
useEffect(() => { const id = setInterval(() => { setCount(count + 1); }, 1000); return () => clearInterval(id); }, [count]);
. , , тАФ , .
count
,
count
,
setCount(count + 1)
:
,
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' });
.
: ┬л , ?┬╗. , 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 SearchResults() { const [query, setQuery] = useState('react');
, (, ), . .
, . , :
function SearchResults() {
.
? , ┬л ┬╗. 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
тАФ , .
, ┬л┬╗ , .
getFetchUrl
(, , ), :
function SearchResults() {
,
getFetchUrl
. , тАФ . - , , . , , , .
тАФ .
, , :
, . , , .
. ,
useCallback :
function SearchResults() {
useCallback
. : , -, , , .
, . (
'react'
'redux'
). , , ,
query
. , ,
query
,
getFetchUrl
.
,
query
useCallback
:
function SearchResults() { const [query, setQuery] = useState('react'); const getFetchUrl = useCallback(() => {
useCallback
query
, ,
getFetchUrl
,
query
:
function SearchResults() { const [query, setQuery] = useState('react');
useCallback
,
query
,
getFetchUrl
, , .
query
,
getFetchUrl
, . Excel: - , , , .
тАФ , . , :
function Parent() { const [query, setQuery] = useState('react');
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;
, : ┬л , , ,
useEffect
тАФ
componentDidMount
componentDidUpdate
. !┬╗.
componentDidUpdate
:
class Child extends Component { state = { data: null }; componentDidMount() { this.props.fetchData(); } componentDidUpdate(prevProps) {
,
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;
, , - , , .
, , .
this
, . , , , , - . ,
this.props.fetchData
, , , , , .
-
useCallback
. , , , . , .
useCallback
props.fetchData
.
,
useMemo
:
function ColorPicker() {
,
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
, , , - . , , , . , ,
, , .
рдкрд░рд┐рдгрд╛рдо
, . , , - , , , .
