Immer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ React Application Status рдХреЛ рдореИрдиреЗрдЬ рдХрд░рдирд╛

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



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

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

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ Immer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдореВрд▓ рдмрд╛рддреЗрдВ


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

Immer, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдерд╛, CMD + C рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ "рджрдмрд╛рдХрд░" рд░рд╛рдЬреНрдп рдХреЛ рдХреЙрдкреА рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░, CMD + V рдХреБрдВрдЬрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╡рд╣ рдирдХрд▓ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЙрд╕рдиреЗ рдРрд╕реА рдЬрдЧрд╣ рдкрд░ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╣рд╛рдВ рдореВрд▓ рдбреЗрдЯрд╛ рдХреЛ рдкрд░реЗрд╢рд╛рди рдХрд┐рдП рдмрд┐рдирд╛ рдХреЙрдкреА рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЛ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд░рд╛рдЬреНрдп рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдЖрдВрдХрдбрд╝реЛрдВ рдХреЛ рдмрджрд▓рдирд╛ "рдбреНрд░рд╛рдлреНрдЯ" рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рдж, "рдбреНрд░рд╛рдлреНрдЯ" рдореЗрдВ рдХрд┐рдП рдЧрдП рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЖрд╡реЗрджрди рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдкрдХреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрдерд┐рддрд┐ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:

this.state = {   name: 'Kunle',   age: 30,   city: 'Lagos',   country: 'Nigeria' } 

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

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

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

рдЙрджрд╛рд╣рд░рдг рдирдВрдмрд░ 1: рдЯреНрд░реИрдлрд┐рдХ рд▓рд╛рдЗрдЯ


рдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ рдЬреЛ Immer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдЖрдк рдПрдХ рдЯреНрд░реИрдлрд┐рдХ рд▓рд╛рдЗрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЖрдк Immer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

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


рдЯреНрд░реИрдлрд┐рдХ рд▓рд╛рдЗрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди

рдпрд╣рд╛рдВ рдЖрдк рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛрдб рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣рд╛рдБ рдШрдЯрдХ рдХреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛, рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ Immer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИред

 const {produce} = immer class App extends React.Component {  state = {    red: 'red',    yellow: 'black',    green: 'black',    next: "yellow"  }  componentDidMount() {    this.interval = setInterval(() => this.changeHandle(), 3000);  }   componentWillUnmount() {    clearInterval(this.interval);  }  handleRedLight = () => {    this.setState(      produce(draft => {        draft.red = 'red';        draft.yellow = 'black';        draft.green = 'black';        draft.next = 'yellow'      })    )  }   handleYellowLight = () => {    this.setState(      produce(draft => {        draft.red = 'black';        draft.yellow = 'yellow';        draft.green = 'black';        draft.next = 'green'      })    )  }   handleGreenLight = () => {    this.setState(      produce(draft => {        draft.red = 'black';        draft.yellow = 'black';        draft.green = 'green';        draft.next = 'red'      })    )  }  changeHandle = () => {    if (this.state.next === 'yellow') {      this.handleYellowLight()    } else if (this.state.next === 'green') {      this.handleGreenLight()    } else {      this.handleRedLight()    }     }  render() {    return (      <div className="box">        <div className="circle" style={{backgroundColor: this.state.red}}></div>        <div className="circle" style={{backgroundColor: this.state.yellow}}></div>        <div className="circle" style={{backgroundColor: this.state.green}}></div>      </div>  ); } }; 

Produce рдПрдХ рдорд╛рдирдХ рдлреАрдЪрд░ рд╣реИ рдЬреЛ рдЗрдорд░ рд╕реЗ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдо рдЗрд╕реЗ setState() рд╡рд┐рдзрд┐ рдХреЗ рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред produce рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓реЗрддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ, draft ред рдпрд╣ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рднреАрддрд░ рд╣реИ рдХрд┐ рд╣рдо "рдбреНрд░рд╛рдлреНрдЯ" рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдЙрд╕ рд░реВрдк рдореЗрдВ рд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд▓реЗрдирд╛ рдЪрд╛рд╣рд┐рдПред

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

 const handleLight = (state) => {  return produce(state, (draft) => {    draft.red = 'black';    draft.yellow = 'black';    draft.green = 'green';    draft.next = 'red'  }); } 

рдлрд╝рдВрдХреНрд╢рди рдХрд╛ produce рдХрд░рдиреЗ рдХреЗ produce , рд╣рдо, рддрд░реНрдХреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдФрд░ draft рддрд░реНрдХ рдХреЛ рд▓реЗрдиреЗ рд╡рд╛рд▓реЗ рдПрдХ рдЕрдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рдЕрдм рдШрдЯрдХ рдореЗрдВ рдЗрд╕ рд╕рдм рдХрд╛ рд▓рд╛рдн рдЙрдард╛рддреЗ рд╣реИрдВ:

 handleGreenLight = () => {  const nextState = handleLight(this.state)  this.setState(nextState) } 

рдЙрджрд╛рд╣рд░рдг 2: рдЦрд░реАрджрд╛рд░реА рдХреА рд╕реВрдЪреА


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

рд╣рдо рдЗрдореЗрд░ рдХреА рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВрдЧреЗ, рдЬрд┐рд╕рд╕реЗ рдЦрд░реАрджрд╛рд░реА рд╕реВрдЪреА рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИред


рдЦрд░реАрджрд╛рд░реА рдХреА рд╕реВрдЪреА

рдпрд╣рд╛рдВ рдЖрдк рдЗрд╕рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣рд╛рдВ рд╡рд╣ рдШрдЯрдХ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдо рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред

 class App extends React.Component {  constructor(props) {      super(props)           this.state = {        item: "",        price: 0,        list: [          { id: 1, name: "Cereals", price: 12 },          { id: 2, name: "Rice", price: 10 }        ]      }    }    handleInputChange = e => {      this.setState(      produce(draft => {        draft[event.target.name] = event.target.value      }))    }    handleSubmit = (e) => {      e.preventDefault()      const newItem = {        id: uuid.v4(),        name: this.state.name,        price: this.state.price      }      this.setState(        produce(draft => {          draft.list = draft.list.concat(newItem)        })      )    };  render() {    return (      <React.Fragment>        <section className="section">          <div className="box">            <form onSubmit={this.handleSubmit}>              <h2>Create your shopping list</h2>              <div>                <input                  type="text"                  placeholder="Item's Name"                  onChange={this.handleInputChange}                  name="name"                  className="input"                  />              </div>              <div>                <input                  type="number"                  placeholder="Item's Price"                  onChange={this.handleInputChange}                  name="price"                  className="input"                  />              </div>              <button className="button is-grey">Submit</button>            </form>          </div>                   <div className="box">            {              this.state.list.length ? (                this.state.list.map(item => (                  <ul>                    <li key={item.id}>                      <p>{item.name}</p>                      <p>${item.price}</p>                    </li>                    <hr />                  </ul>                ))              ) : <p>Your list is empty</p>            }          </div>        </section>      </React.Fragment>    )  } } ReactDOM.render(  <App />,  document.getElementById('root') ); 

рд╕реВрдЪреА рдореЗрдВ рдирдП рд╢реЙрдкрд┐рдВрдЧ рдиреЛрдЯреНрд╕ рдЬреЛрдбрд╝рддреЗ рд╕рдордп, рд╣рдореЗрдВ рдЙрд╕ рдШрдЯрдХ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ list рд╕рд░рдгреА рдореЗрдВ, рдирдП рддрддреНрд╡реЛрдВ рдХреЛ рд╕рд╣реЗрдЬрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред setState() рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ list рдЖрдЗрдЯрдо рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ list , setState() рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:

 handleSubmit = (e) => {  e.preventDefault()  const newItem = {    id: uuid.v4(),    name: this.state.name,    price: this.state.price  }  this.setState({ list: [...this.state.list, newItem] }) }; 

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

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

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


рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдЦрд░реАрдж рдХреА рдХреБрд▓ рд▓рд╛рдЧрдд рдХреА рдЧрдгрдирд╛ рдХреЗ рд╕рдорд╛рд░реЛрд╣ рдХреЗ рд╕рд╛рде рдЖрд╡реЗрджрди

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

 handleSubmit = (e) => {  e.preventDefault()  const newItem = {    id: uuid.v4(),    name: this.state.name,    price: this.state.price  }   this.setState(    produce(draft => {      draft.list = draft.list.concat(newItem)    }), () => {      this.calculateAmount(this.state.list)    }  ) }; 

handleSubmit рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ handleSubmit рд╣рдо рдкрд╣рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВред рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд╕рдВрджрд░реНрдн рдирд┐рд░рдВрддрд░ newItem рдХреЛ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдирдпрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реНрдерд┐рддрд┐ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП .concat() рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╡рд┐рдзрд┐, рдЬрд┐рд╕реЗ рдПрдХ рд╕рд░рдгреА рдкрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдПрдХ рдирдпрд╛ рд╕рд░рдгреА рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдореВрд▓ рд╕рд░рдгреА рдХреЗ рддрддреНрд╡ рдФрд░ рд╕рд╛рде рд╣реА рдПрдХ рдирдпрд╛ рддрддреНрд╡ рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИред рдирдпрд╛ рд╕рд░рдгреА draft.list рдХреЛ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдЙрд╕рдХреЗ рдмрд╛рдж, Immer рдЖрд╡реЗрджрди рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

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

calculateAmount рдлрдВрдХреНрд╢рди рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

 calculateAmount = (list) => {  let total = 0;    for (let i = 0; i < list.length; i++) {      total += parseInt(list[i].price, 10)    }  this.setState(    produce(draft => {      draft.totalAmount = total    })  ) } 

рд╣реБрдХ рдЗрдореНрдорд░


Use-immer рдПрдХ рд╣реБрдХ рд╣реИ рдЬреЛ рдПрдХ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рд░рд┐рдПрдХреНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рд╣реБрдХ рдХреНрд▓рд╛рд╕рд┐рдХ рдХрд╛рдЙрдВрдЯрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ:

 import React from "react"; import {useImmer} from "use-immer"; const Counter = () => {  const [count, updateCounter] = useImmer({    value: 0  });  function increment() {    updateCounter(draft => {      draft.value = draft.value +1;    });  }  return (    <div>      <h1>        Counter {count.value}      </h1>      <br />      <button onClick={increment}>Increment</button>    </div>  ); } export default Counter; 

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

рдФрд░ рдпрд╣рд╛рдБ рд╡рд╣ рдХреЛрдб рд╣реИ рдЬреЛ Immer рдХреЗ рд▓рд┐рдП рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреА рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реИ:

 import React, { useRef } from "react"; import {useImmerReducer } from "use-immer"; import uuidv4 from "uuid/v4" const initialState = []; const reducer = (draft, action) => {  switch (action.type) {    case "ADD_ITEM":      draft.push(action.item);      return;    case "CLEAR_LIST":      return initialState;    default:      return draft;  } } const Todo = () => {  const inputEl = useRef(null);  const [state, dispatch] = useImmerReducer(reducer, initialState);   const handleSubmit = (e) => {    e.preventDefault()    const newItem = {      id: uuidv4(),      text: inputEl.current.value    };    dispatch({ type: "ADD_ITEM", item: newItem });    inputEl.current.value = "";    inputEl.current.focus();  }   const handleClear = () => {    dispatch({ type: 'CLEAR_LIST' })  }   return (    <div className='App'>      <header className='App-header'>        <ul>          {state.map(todo => {            return <li key={todo.id}>{todo.text}</li>;          })}        </ul>        <form onSubmit={handleSubmit}>          <input type='text' ref={inputEl} />          <button            type='submit'          >            Add Todo          </button>        </form>        <button          onClick={handleClear}        >          Clear Todos        </button>      </header>    </div>  ); } export default Todo; 

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

Reducer рдореЗрдВ, рд╣рдо рдкрд╣рд▓реЗ рдХреА рддрд░рд╣ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдПрдХ draft рдЗрдХрд╛рдИ, рдПрдХ state рдирд╣реАрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╕реНрдерд┐рддрд┐ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХрд╛ рд╣реИред

рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

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


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

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

рдкреНрд░рд┐рдп рдкрд╛рдардХреЛрдВ! рдХреНрдпрд╛ рдЖрдк Immer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ?

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


All Articles