рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╣реБрдХ - рдЬреАрдд рдпрд╛ рд╣рд╛рд░?

рдЫрд╡рд┐


рдирдП рд░рд┐рдПрдХреНрдЯ 16.6.0 рдХреА рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рд╕рд╛рде, HOOKS (PROPOSAL) рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ред рд╡реЗ рдЕрдм рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ 17.0.0-рдЕрд▓реНрдлрд╛ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ рдФрд░ рдЦреБрд▓реЗ рдЖрд░рдПрдлрд╕реА: рд░рд┐рдПрдХреНрдЯ рд╣реБрдХ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдХрдЯ рдХреЗ рддрд╣рдд рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИред


рд╣рд╛рдБ, рдпрд╣ RFC рд╣реИ рдФрд░ рдЖрдк рдЕрдВрддрд┐рдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд░рдЪрдирд╛рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдЪрд░реНрдЪрд╛ рдХрд░рддреЗ рд╣реБрдП рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рдпрд╣ рдпрд╛ рдЙрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдХреНрдпреЛрдВ рдЪреБрдирд╛ред


рдЖрдЗрдП рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ рдХрд┐ рдорд╛рдирдХ рд╣реБрдХ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:


import { useState } from 'react'; function Example() { // Declare a new state variable, which we'll call "count" const [count, setCount] = useState(0); return ( <div> <p>You clicked {count} times</p> <button onClick={() => setCount(count + 1)}> Click me </button> </div> ); } 

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


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


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


рдкреНрд░реЗрд░рдгрд╛


рд╣реБрдХ рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рдЧреИрд░-рдХрдиреЗрдХреНрдЯреЗрдб рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдлреЗрд╕рдмреБрдХ рд╕реЗ 5 рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рд╣рдЬрд╛рд░реЛрдВ рдШрдЯрдХреЛрдВ рдХреЗ рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рджрд┐рдЦрд╛рдИ рджрд┐рдПред


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


рдЫрд╡рд┐


рдЗрд╕реЗ рд▓рдкреЗрдЯрд╛-рдирд░рдХ - рдЖрд╡рд░рдг рдирд░рдХ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред


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


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


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


рд╣реБрдХ рдЖрдкрдХреЛ рдЕрд╡рдпрд╡реЛрдВ рдХреЗ рдмреАрдЪ рддрд░реНрдХ рдХреЛ рдЫреЛрдЯреЗ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рддреЛрдбрд╝рдХрд░ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдШрдЯрдХреЛрдВ рдХреЗ рдЕрдВрджрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред


рдХрдХреНрд╖рд╛рдПрдВ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдФрд░ рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдореБрд╢реНрдХрд┐рд▓ рд╣реИрдВ


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


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


рд╣реБрдХ рдХреЛ рджреЗрдЦреЛ


рд░рд╛рдЬреНрдп рд╣реБрдХ


рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рдПрдХ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдФрд░ рдПрдХ рдмрдЯрди рдХреЛ рд░реЗрдВрдбрд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рд╣рдо рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдореЗрдВ рдореВрд▓реНрдп рдмрдврд╝ рдЬрд╛рдПрдЧрд╛ред


 import { useState } from 'react'; function Example() { // Declare a new state variable, which we'll call "count" const [count, setCount] = useState(0); return ( <div> <p>You clicked {count} times</p> <button onClick={() => setCount(count + 1)}> Click me </button> </div> ); } 

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


 function ExampleWithManyStates() { // Declare multiple state variables! const [age, setAge] = useState(42); const [fruit, setFruit] = useState('banana'); const [todos, setTodos] = useState([{ text: 'Learn Hooks' }]); // ... } 

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


рдкреНрд░рднрд╛рд╡ рд╣реБрдХ


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


 import { useState, useEffect } from 'react'; function Example() { const [count, setCount] = useState(0); // Similar to componentDidMount and componentDidUpdate: useEffect(() => { // Update the document title using the browser API document.title = `You clicked ${count} times`; }); return ( <div> <p>You clicked {count} times</p> <button onClick={() => setCount(count + 1)}> Click me </button> </div> ); } 

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


 function FriendStatusWithCounter(props) { const [count, setCount] = useState(0); useEffect(() => { document.title = `You clicked ${count} times`; }); const [isOnline, setIsOnline] = useState(null); useEffect(() => { ChatAPI.subscribeToFriendStatus(props.friend.id, handleStatusChange); return () => { ChatAPI.unsubscribeFromFriendStatus(props.friend.id, handleStatusChange); }; }); function handleStatusChange(status) { setIsOnline(status.isOnline); } // ... 

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


рд╣реБрдХ рдирд┐рдпрдо


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


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

рдХрд╕реНрдЯрдо рд╣реБрдХ


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


 import { useState, useEffect } from 'react'; function useFriendStatus(friendID) { const [isOnline, setIsOnline] = useState(null); function handleStatusChange(status) { setIsOnline(status.isOnline); } useEffect(() => { ChatAPI.subscribeToFriendStatus(friendID, handleStatusChange); return () => { ChatAPI.unsubscribeFromFriendStatus(friendID, handleStatusChange); }; }); return isOnline; } 

рдЗрд╕ рдХреЛрдб рдХреЛ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВ, рдпрд╣ рдПрдХ рдХрд╕реНрдЯрдо рд╣реБрдХ рд╣реЛрдЧрд╛ рдЬрд┐рд╕реЗ рд╣рдо рд╡рд┐рднрд┐рдиреНрди рдШрдЯрдХреЛрдВ рдореЗрдВ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣:


 function FriendStatus(props) { const isOnline = useFriendStatus(props.friend.id); if (isOnline === null) { return 'Loading...'; } return isOnline ? 'Online' : 'Offline'; } 

рдпрд╛ рддреЛ


 function FriendListItem(props) { const isOnline = useFriendStatus(props.friend.id); return ( <li style={{ color: isOnline ? 'green' : 'black' }}> {props.friend.name} </li> ); } 

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


рдХреБрдЫ рдФрд░ рд╣реБрдХ рд╣реИрдВред


useContext


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


 function Example() { const locale = useContext(LocaleContext); const theme = useContext(ThemeContext); // ... } 

рдФрд░ рдЕрдм рд╣рдо рдХреЗрд╡рд▓ рд░рд┐рдЯрд░реНрди рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд╕рдВрджрд░реНрдн рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


useCallback


 const memoizedCallback = useCallback( () => { doSomething(a, b); }, [a, b], ); 

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


useMemo


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


 const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]); 

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


useRef


useRef рдПрдХ рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрд┐рдд рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдБ .current рдлрд╝реАрд▓реНрдб рдХреЛ рдкрд╣рд▓реЗ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдЖрд░рдВрднреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрдм рддрдХ рдШрдЯрдХ рдореМрдЬреВрдж рд░рд╣реЗрдЧрд╛ рддрдм рддрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдореМрдЬреВрдж рд░рд╣реЗрдЧрд╛ред
рдЗрдирдкреБрдЯ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддреЗ рд╕рдордп рд╕рдмрд╕реЗ рдЖрдо рдЙрджрд╛рд╣рд░рдг рд╣реИ


 function TextInputWithFocusButton() { const inputEl = useRef(null); const onButtonClick = () => { // `current` points to the mounted text input element inputEl.current.focus(); }; return ( <> <input ref={inputEl} type="text" /> <button onClick={onButtonClick}>Focus the input</button> </> ); } 

useImperativeMethods


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


 function FancyInput(props, ref) { const inputRef = useRef(); useImperativeMethods(ref, () => ({ focus: () => { inputRef.current.focus(); } })); return <input ref={inputRef} ... />; } FancyInput = forwardRef(FancyInput); 

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдШрдЯрдХ рдЬреЛ FancyInput рдХреЛ FancyInput fancyInputRef.current.focus() рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВред


useMutationEffect


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


useLayoutEffect


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


useReducer


useReducer рдПрдХ reducer рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реБрдХ рд╣реИ рдЬреЛ рд░рд╛рдЬреНрдп рдХреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рднреЗрдЬрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ:


 const [state, dispatch] = useReducer(reducer, initialState); 

рдпрджрд┐ рдЖрдк рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ Redux рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдк рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рдХреИрд╕реЗ useReducer ред рдПрдХ рд╣реА рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдКрдкрд░ рдХреЗ рдХрд╛рдЙрдВрдЯрд░ рдХреЗ рд╕рд╛рде рдерд╛:


 const initialState = {count: 0}; function reducer(state, action) { switch (action.type) { case 'reset': return initialState; case 'increment': return {count: state.count + 1}; case 'decrement': return {count: state.count - 1}; } } function Counter({initialCount}) { const [state, dispatch] = useReducer(reducer, initialState); return ( <> Count: {state.count} <button onClick={() => dispatch({type: 'reset'})}> Reset </button> <button onClick={() => dispatch({type: 'increment'})}>+</button> <button onClick={() => dispatch({type: 'decrement'})}>-</button> </> ); } 

UseReducer рднреА 3 рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИ, рдпрд╣ рд╡рд╣ action рд╣реИ рдЬрд┐рд╕реЗ рддрдм рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм reducer рдЖрд░рдВрднреАрдХреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ:


 const initialState = {count: 0}; function reducer(state, action) { switch (action.type) { case 'reset': return {count: action.payload}; case 'increment': return {count: state.count + 1}; case 'decrement': return {count: state.count - 1}; } } function Counter({initialCount}) { const [state, dispatch] = useReducer( reducer, initialState, {type: 'reset', payload: initialCount}, ); return ( <> Count: {state.count} <button onClick={() => dispatch({type: 'reset', payload: initialCount})}> Reset </button> <button onClick={() => dispatch({type: 'increment'})}>+</button> <button onClick={() => dispatch({type: 'decrement'})}>-</button> </> ); } 

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


рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рджреЗрдирд╛


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

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


All Articles