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

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