рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░! рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдЖрдкрдХреЛ Redux рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд╝реНрд▓рдЯрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдмрддрд╛рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдпрджрд┐ рдЖрдкрдХреЛ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐
рд╕реНрдкрдВрджрди рдХреНрдпрд╛
рд╣реИ , рддреЛ рдпрд╣ Google рд╕реЗ рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд рдПрд╕рдбреАрдХреЗ рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдВрдбреНрд░реЙрдЗрдб рдФрд░ рдЖрдИрдУрдПрд╕ рдХреЗ рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ Google рдлреВрд╢рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рднреА рд╣реИред
рдпрджрд┐ рдЖрдк рдлрд╝реНрд▓рдЯрд░ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ рдФрд░ рдПрдХ рдРрд╕рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ, рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд╣реЛ, рдФрд░ рдмрд╣реБрдд рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рдирд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛ, рддреЛ рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдкрдврд╝рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВ рдФрд░ рдЖрдкрдХреЛ рдЬрд▓реНрдж рд╣реА рдкрддрд╛ рдЪрд▓ рдЬрд╛рдПрдЧрд╛!
рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рдЖрд╡реЗрджрди рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВред рдЖрдЗрдП рд╕рд┐рджреНрдзрд╛рдВрдд рд╕реЗ рдереЛрдбрд╝рд╛ рдкрд░рд┐рдЪрд┐рдд рд╣реЛ рдЬрд╛рдПрдВ, рдЪрд▓реЛ Redux рдХреНрдпрд╛ рд╣реИ рдпрд╣ рд╕рдордЭрд╛рдХрд░ рд╢реБрд░реВ рдХрд░реЗрдВред
Redux рдХреНрдпрд╛ рд╣реИ?
Redux рдПрдХ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рд╣реИ рдЬреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдИ рдЧрдИ рд╣реИ рдФрд░ рдЙрди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рддреА рд╣реИ рдЬреЛ
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдЪреМрдЦрдЯреЗ (рдЬреИрд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореВрд▓ рдпрд╛ рд╕реНрдкрдВрджрди) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдИ рдЧрдИ рд╣реИрдВред Redux рдлреЗрд╕рдмреБрдХ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдорд┐рдд рдлреНрд▓рдХреНрд╕ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХрд╛ рд╕рд░рд▓реАрдХреГрдд рд╕рдВрд╕реНрдХрд░рдг рд╣реИред рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ, рдЖрдкрдХреЛ рддреАрди рдмрд╛рддреЗрдВ рдЬрд╛рдирдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ:
- рд╕рддреНрдп рдХрд╛ рдПрдХрдорд╛рддреНрд░ рд╕реНрд░реЛрдд - рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдХреА рдкреВрд░реА рд╕реНрдерд┐рддрд┐ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреА рд╣реИ (рдЬрд┐рд╕реЗ рд╕реНрдЯреЛрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ )ред
- рд░рд╛рдЬреНрдп рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ / рд░рд╛рдЬреНрдп рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ - рдЖрд╡реЗрджрди рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХрд╛рд░реНрд░рд╡рд╛рдИ (рдХрд╛рд░реНрд░рд╡рд╛рдИ) рднреЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдПрдХ рдирдпрд╛ рд░рд╛рдЬреНрдп рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛
- рд╢реБрджреНрдз рдХрд╛рд░реНрдпреЛрдВ / рд╢реБрджреНрдз рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░рд┐рд╡рд░реНрддрди рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ - рдПрдХ рд╢реБрджреНрдз рдХрд╛рд░реНрдп (рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП, рдпрд╣ рджреБрд╖реНрдкреНрд░рднрд╛рд╡реЛрдВ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдХрд╛рд░реНрдп рд╣реИ) рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрд╡реЗрджрди рдХреА рдирдИ рд╕реНрдерд┐рддрд┐ рдХреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ
рдиреЛрдЯ: рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдПрдХ рдкрдХреНрд╖ рдкреНрд░рднрд╛рд╡ рдЗрд╕рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХреНрд╖рдорддрд╛ рд╣реИ: рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкрдврд╝рдирд╛ рдФрд░ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛, I / O рд╕рдВрдЪрд╛рд▓рди рдХрд░рдирд╛, рдЕрд╕рд╛рдзрд╛рд░рдг рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдирд╛, рдФрд░ рдЙрдирдХреЗ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ред рдпрджрд┐ рдЖрдк рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рднрд╛рд╡ рдХреЗ рд╕рд╛рде рджреЛ рдмрд╛рд░ рдЗрдирдкреБрдЯ рддрд░реНрдХ рдорд╛рдиреЛрдВ рдХреЗ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╣рддреЗ рд╣реИрдВ, рддреЛ рдРрд╕рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдорд╛рди рд▓реМрдЯрд╛рдП рдЬрд╛рдПрдВред рдРрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдЧреИрд░-рдирд┐рдпрддрд╛рддреНрдордХ рдХрд╛рд░реНрдп рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИредрд╢рд╛рдВрдд рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреЗ рдХреНрдпрд╛ рд▓рд╛рдн рд╣реИрдВ?
- рд░рд╛рдЬреНрдп / рд░рд╛рдЬреНрдп рдкрд░ рд╣рдорд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рдг рд╣реИ - рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд░рд╛рдЬреНрдп рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд╛ рдХрд╛рд░рдг рдХреНрдпрд╛ рд╣реИ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╕реНрдерд┐рддрд┐ рдирд╣реАрдВ рд╣реИ, рдФрд░ рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
- Reducer рд╢реБрджреНрдз рдХрд╛рд░реНрдп рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ - рд╣рдо рд░рд╛рдЬреНрдп рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрдирдкреБрдЯ рдкрд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЬрд╛рдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдкрд░рд┐рдгрд╛рдо рд╕рд╣реА рд╣реИ
- рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдВрд░рдЪрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрд╛рд░реНрдпреЛрдВ, рдореЙрдбрд▓, рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд░рддреЗрдВ рд╣реИрдВ - рдЗрд╕рд▓рд┐рдП рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдФрд░ рдирдИ рд╕реБрд╡рд┐рдзрд╛ рдХрд╣рд╛рдВ рд╕реЗ рдЬреЛрдбрд╝рдирд╛ рд╣реИ
- рдпрд╣ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╣рд╛рди рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рд╣реИ - рдЖрдкрдХреЛ рдорд╛рддрд╛-рдкрд┐рддрд╛ рд╕реЗ рдмрдЪреНрдЪреЗ рддрдХ рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░ рдХреЗ рдкреВрд░реЗ рдкреЗрдбрд╝ рдХреЗ рдкрд╛рд░ рд░рд╛рдЬреНрдп рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛
- рдФрд░ рдПрдХ рдФрд░ рд╣реИ ...
Redux рд╕рдордп рдпрд╛рддреНрд░рд╛
Redux рдореЗрдВ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдЕрд╡рд╕рд░ рд╣реИ - рдЯрд╛рдЗрдо рдЯреНрд░реИрд╡рд▓! Redux рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде, рдЖрдк рд╕рдордп рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдЯреНрд░реИрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХрд┐рд╕реА рднреА рд╕рдордп рдЗрд╕реЗ рдкреБрдирдГ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рджреЗрдЦреЗрдВ:
рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде Redux рд╡рд┐рдЬреЗрдЯреНрд╕
рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдирд┐рдпрдо Redux рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рдХреЛ рдпреВрдирд┐рдбрд╛рдпрд░реЗрдХреНрд╢рдирд▓ рдмрдирд╛рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ? рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдпрд╣ рд╕рдм
рдХрд╛рд░реНрд░рд╡рд╛рдИ ,
рд░рд┐рдбреНрдпреВрд╕рд░ ,
рд╕реНрдЯреЛрд░ рдФрд░
рд░рд╛рдЬреНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛
рд╣реИ ред рдЖрдЗрдП рдПрдХ рдЖрд╡реЗрджрди рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдЬреЛ рдПрдХ рдХрд╛рдЙрдВрдЯрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ:

- рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реНрдерд┐рддрд┐ рд╣реИ (рдХреНрд▓рд┐рдХ рдХреА рд╕рдВрдЦреНрдпрд╛, рдЬреЛ 0 рд╣реИ)
- рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рджреГрд╢реНрдп рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдХрд╛рд░реНрд░рд╡рд╛рдИ рднреЗрдЬреА рдЬрд╛рддреА рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрдВрдХреНрд░реАрдореЗрдВрдЯрдХрд╛рдЙрдВрдЯрд░)
- рдЙрд╕рдХреЗ рдмрд╛рдж, рдПрдХреНрд╢рди рдХреЛ рдПрдХ рд░реЗрдбреНрдпреВрд╕рд░ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдкрд┐рдЫрд▓реА рд╕реНрдерд┐рддрд┐ (рдХрд╛рдЙрдВрдЯрд░ 0) рдХреЛ рдЬрд╛рдирддрд╛ рд╣реИ, рдФрд░ рдПрдХреНрд╢рди (рдЗрдВрдХреНрд░реАрдореЗрдВрдЯрдХрд╛рдЙрдВрдЯрд░) рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдирдпрд╛ рд╕реНрдЯреЗрдЯ рд▓реМрдЯрд╛ рд╕рдХрддрд╛ рд╣реИ (рдХрд╛рдЙрдВрдЯрд░ рдЕрдм 1 рд╣реИ)
- рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ рдПрдХ рдирдпрд╛ рд░рд╛рдЬреНрдп рд╣реИ (рдХрд╛рдЙрдВрдЯрд░ 1 рд╣реИ)
- рдирдП рд░рд╛рдЬреНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рджреГрд╢реНрдп рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ
рдЗрд╕рд▓рд┐рдП, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рд╕рднреА
рд░рд╛рдЬреНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рд╣реИ ред рдЖрдкрдХреЗ рдкрд╛рд╕ рдкреВрд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдПрдХ рд░рд╛рдЬреНрдп рд╣реИ,
рд░рд╛рдЬреНрдп рдХреЗрд╡рд▓-рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рдФрд░ рдПрдХ рдирдпрд╛
рд░рд╛рдЬреНрдп рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ
рдХрд╛рд░реНрд░рд╡рд╛рдИ рднреЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕рдмрдорд┐рдЯ
рдХрд░рдиреЗ рд╕реЗ рдПрдХ
рд░рд┐рдбреНрдпреВрд╕рд░ рд▓реЙрдиреНрдЪ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рд╣рдореЗрдВ рдПрдХ рдирдпрд╛
рд░рд╛рдЬреНрдп рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рджреЗрддрд╛ рд╣реИред рдФрд░ рдХрд╣рд╛рдиреА рдЦреБрдж рдХреЛ рджреЛрд╣рд░рд╛рддреА рд╣реИред
рдЖрдЗрдП рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВ рдФрд░ рдПрдХреНрд╢рди рдореЗрдВ Redux рдПрдкреНрд░реЛрдЪ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдиреЗрдВ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ "
рд╢реЙрдкрд┐рдВрдЧ рд▓рд┐рд╕реНрдЯ " рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред
рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ Redux рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╣рдо рдПрдХ рд╕рд░рд▓ рд╢реЙрдкрд┐рдВрдЧ рдХрд╛рд░реНрдЯ рдРрдк рдмрдирд╛рдПрдВрдЧреЗред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдРрд╕реА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реЛрдВрдЧреА:
- рдЦрд░реАрджрд╛рд░реА рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реИ
- рдкреВрд░реНрдг рдХреЗ рд░реВрдк рдореЗрдВ рдЦрд░реАрдж рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛
- рдФрд░ рд╡рд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рд╕рднреА рд╣реИ
рдЖрд╡реЗрджрди рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ!
рдорд╛рдВрдЧ
рдЗрд╕ рдЖрд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдирд╣реАрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ред
рдЖрдк рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдЙрд╕ рдХреЛрдб рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ Redux рдбрд╛рдЗрд╡ рдХреЗ рд╕рд╛рде рдЬрд╛рд░реА рд░рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдерд╛ ред рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╣рдо рдХреЛрдб рд▓рд┐рдЦрдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВрдЧреЗ рдФрд░ рд╡рд░реНрддрдорд╛рди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ
Redux рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗред
рдиреЛрдЯ: рдпрджрд┐ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рдХрднреА рднреА Flutter рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдк Google рд╕реЗ Flutter Codelabs рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВредрдкреНрд░рд╛рд░рдВрднрд┐рдХ рддреИрдпрд╛рд░реА
рдлрд╝реНрд▓рдЯрд░ рдХреЗ рд▓рд┐рдП
Redux рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ
pubspec.yaml рдлрд╝рд╛рдЗрд▓ рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
flutter_redux: ^0.5.2
рдЖрдк рдЗрд╕ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдХреЛ
flutter_redux рдкреГрд╖реНрда рдкрд░ рдЬрд╛рдХрд░ рднреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
рд▓реЗрдЦрди рдХреЗ рд╕рдордп, рд╕рдВрд╕реНрдХрд░рдг рдерд╛, flutter_redux 0.6.0рдЖрджрд░реНрд╢
рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рддрддреНрд╡реЛрдВ рдХреЗ рдЬреЛрдбрд╝ рдФрд░ рд╕рдВрд╢реЛрдзрди рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рд╣рдо рдПрдХ рддрддреНрд╡ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓
рдХрд╛рд░реНрдЯ рдЗрдЯ рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рд╣рдорд╛рд░реЗ рд╕рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрдЯреЗрдЯ рд╕рд┐рд░реНрдл рдХрд╛рд░реНрдЯрд┐рдореНрд╕ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реЛрдЧреАред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, CartItem рд╕рд┐рд░реНрдл рдПрдХ рд╡рд╕реНрддреБ рд╣реИред
class CartItem { String name; bool checked; CartItem(this.name, this.checked); }
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХрд╛рд░реНрд░рд╡рд╛рдИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХрд┐рд╕реА рднреА рдЗрд░рд╛рджреЗ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдХрд┐рд╕реА рддрддреНрд╡ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдФрд░ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рдХреНрд░рд┐рдпрд╛рдПрдВ рд╣реЛрдВрдЧреА:
class AddItemAction { final CartItem item; AddItemAction(this.item); } class ToggleItemStateAction { final CartItem item; ToggleItemStateAction(this.item); }
рдлрд┐рд░ рд╣рдореЗрдВ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЛ рдпрд╣ рдмрддрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЗрди
рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐
reducers рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рд╡реЗ рд╕рд┐рд░реНрдл рдЖрд╡реЗрджрди рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдФрд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ (рдЖрд╡реЗрджрди рд░рд╛рдЬреНрдп рдФрд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ) рд▓реЗрддреЗ рд╣реИрдВ, рдлрд┐рд░ рдПрдХ рдирдпрд╛ рд░рд╛рдЬреНрдп рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рджреЛ
reducer рддрд░реАрдХреЗ рд╣реЛрдВрдЧреЗ:
List<CartItem> appReducers(List<CartItem> items, dynamic action) { if (action is AddItemAction) { return addItem(items, action); } else if (action is ToggleItemStateAction) { return toggleItemState(items, action); } return items; } List<CartItem> addItem(List<CartItem> items, AddItemAction action) { return List.from(items)..add(action.item); } List<CartItem> toggleItemState(List<CartItem> items, ToggleItemStateAction action) { return items.map((item) => item.name == action.item.name ? action.item : item).toList(); }
AppReducers () рд╡рд┐рдзрд┐ рдЙрдЪрд┐рдд рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ
рджрд░реНрд╢рд╛рддрд╛ рд╣реИ ред рджреЛрдиреЛрдВ
addItem () рдФрд░
toggleItemState () рд╡рд┐рдзрд┐рдпрд╛рдБ рдирдИ рд╕реВрдЪреА
рд▓реМрдЯрд╛рддреА рд╣реИрдВ - рдпрд╣ рд╣рдорд╛рд░реА рдирдИ рд╕реНрдерд┐рддрд┐ / рд╕реНрдерд┐рддрд┐ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрдкрдХреЛ
рд╡рд░реНрддрдорд╛рди рд╕реВрдЪреА рдХреЛ рдирд╣реАрдВ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП ред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рд╣рд░ рдмрд╛рд░ рдПрдХ рдирдИ рд╕реВрдЪреА рдмрдирд╛рддреЗ рд╣реИрдВред
StoreProvider
рдЕрдм рдЬрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕
рдХрд╛рд░реНрд░рд╡рд╛рдИ рдФрд░
рд░рд┐рдбреНрдпреВрд╕рд░ рд╣реИрдВ , рддреЛ рд╣рдореЗрдВ
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА
рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЬрдЧрд╣ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред Redux рдореЗрдВ, рдЗрд╕реЗ
рд╕реНрдЯреЛрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛
рд╣реИ рдФрд░ рдпрд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рд╕рддреНрдп рдХрд╛ рдПрдХрдорд╛рддреНрд░ рд╕реНрд░реЛрдд рд╣реИред
void main() { final store = new Store<List<CartItem>>( appReducers, initialState: new List()); runApp(new FlutterReduxApp(store)); }
рдПрдХ
рд╕реНрдЯреЛрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ
рд░реАрдбреНрдпреВрд╕рд░ рд╡рд┐рдзрд┐ рдФрд░ рдкреНрд░рд╛рд░рдВрднрд┐рдХ
рд╕реНрдерд┐рддрд┐ рдХреЛ рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрджрд┐ рд╣рдордиреЗ рдПрдХ
рд╕реНрдЯреЛрд░ рдмрдирд╛рдпрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЛ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ
рд╕реНрдЯреЛрд░рдкреНрд░реЛрд╡рд╛рдЗрдбрд░ рдХреЗ рдкрд╛рд╕ рднреЗрдЬрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐
рд╕реНрдЯреЛрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рдРрд╕реЗ рд╡реНрдпрдХреНрддрд┐ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЖрд╡реЗрджрди рдХреА рд╡рд░реНрддрдорд╛рди
рд╕реНрдерд┐рддрд┐ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред
class FlutterReduxApp extends StatelessWidget { final Store<List<CartItem>> store; FlutterReduxApp(this.store); @override Widget build(BuildContext context) { return new StoreProvider<List<CartItem>>( store: store, child: new ShoppingCartApp(), ); } }
рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ,
ShoppingCartApp ( ) рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдореБрдЦреНрдп рд╡рд┐рдЬреЗрдЯ рд╣реИред
StoreConnector
рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЫреЛрдбрд╝рдХрд░ рд╕рдм рдХреБрдЫ рд╣реИ ... рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдЗрдЯрдореЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдФрд░ рдмрджрд▓рдирд╛ред рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ? рдЗрд╕реЗ рд╕рдВрднрд╡ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ
StoreConnector рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣
рд╕реНрдЯреЛрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рдХреБрдЫ
рдХрд╛рд░реНрд░рд╡рд╛рдИ рднреЗрдЬрдиреЗ рдпрд╛ рд╡рд░реНрддрдорд╛рди
рд╕реНрдерд┐рддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рд╡рд░реНрддрдорд╛рди рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╕реНрдХреНрд░реАрди рдкрд░ рдПрдХ рд╕реВрдЪреА рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:
class ShoppingList extends StatelessWidget { @override Widget build(BuildContext context) { return new StoreConnector<List<CartItem>, List<CartItem>>( converter: (store) => store.state, builder: (context, list) { return new ListView.builder( itemCount: list.length, itemBuilder: (context, position) => new ShoppingListItem(list[position])); }, ); } }
рдКрдкрд░ рдХреЗ рдХреЛрдб рдХреЛ рдПрдХ
StoreConnector рдХреЗ рд╕рд╛рде
ListView.builder рд▓рдкреЗрдЯрддрд╛ рд╣реИред
StoreConnector рд╡рд░реНрддрдорд╛рди
рд╕реНрдерд┐рддрд┐ (рдЬреЛ рд╡рд╕реНрддреБрдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИ
) рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ
рдФрд░ рдорд╛рдирдЪрд┐рддреНрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕рд╣рд╛рдпрддрд╛ рд╕реЗ рд╣рдо рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдореЗрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдПрдХ рд╣реА рд░рд╛рдЬреНрдп (рд╕реВрдЪреА) рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣рд╛рдВ рд╣рдореЗрдВ рдЦрд░реАрджрд╛рд░реА рд╕реВрдЪреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЕрдЧрд▓рд╛, рдмрд┐рд▓реНрдбрд░ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ, рд╣рдореЗрдВ рдПрдХ рд╕реВрдЪреА рдорд┐рд▓рддреА рд╣реИ - рдЬреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рд╕реНрдЯреЛрд░ рд╕реЗ рдХрд╛рд░реНрдЯрдЗрдореЗрдЯреНрд╕ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдо рдПрдХ рд╕реВрдЪреА рджреГрд╢реНрдп рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдареАрдХ рд╣реИ, рдЕрдЪреНрдЫрд╛ - рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдбреЗрдЯрд╛ рд╣реИред рдЕрдм, рдХреБрдЫ рдбреЗрдЯрд╛ рдХреИрд╕реЗ рд╕реЗрдЯ рдХрд░реЗрдВ?
рдЗрд╕рдХреЗ рд▓рд┐рдП, рд╣рдо StoreConnector рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдереЛрдбрд╝реЗ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗред
class AddItemDialog extends StatelessWidget { @override Widget build(BuildContext context) { return new StoreConnector<List<CartItem>, OnItemAddedCallback>( converter: (store) { return (itemName) => store.dispatch(AddItemAction(CartItem(itemName, false))); }, builder: (context, callback) { return new AddItemDialogWidget(callback); }); } }typedef OnItemAddedCallback = Function(String itemName);
рдХреЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВред рд╣рдордиреЗ рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ StoreConnector рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЗрд╕ рдмрд╛рд░ рдЙрд╕реА рд╕реВрдЪреА рдХреЗ рд╕рд╛рде CartItems рд╕реВрдЪреА рдХреЗ рдорд┐рд▓рд╛рди рдХреЗ рдмрдЬрд╛рдп, рд╣рдо OnItemAddedCallback рдореЗрдВ рдПрдХ рдорд╛рдирдЪрд┐рддреНрд░ рд░реВрдкрд╛рдВрддрд░рдг рдХрд░реЗрдВрдЧреЗ ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо AddItemDialogWidget рдкрд░ рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдПрдХ рдирдпрд╛ рддрддреНрд╡ рдЬреЛрдбрд╝рдиреЗ рдкрд░ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ :
class AddItemDialogWidgetState extends State<AddItemDialogWidget> { String itemName; final OnItemAddedCallback callback; AddItemDialogWidgetState(this.callback); @override Widget build(BuildContext context) { return new AlertDialog( ... actions: <Widget>[ ... new FlatButton( child: const Text('ADD'), onPressed: () { ... callback(itemName); }) ], ); } }
рдЕрдм рдЬрдм рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ ADD рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реИ, рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди AddItemAction () рднреЗрдЬрддрд╛ рд╣реИред
рдЕрдм рд╣рдо рдПрдХ рддрддреНрд╡ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
class ShoppingListItem extends StatelessWidget { final CartItem item; ShoppingListItem(this.item); @override Widget build(BuildContext context) { return new StoreConnector<List<CartItem>, OnStateChanged>( converter: (store) { return (item) => store.dispatch(ToggleItemStateAction(item)); }, builder: (context, callback) { return new ListTile( title: new Text(item.name), leading: new Checkbox( value: item.checked, onChanged: (bool newValue) { callback(CartItem(item.name, newValue)); }), ); }); } }
рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо OnStateChanged рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рд╕реВрдЪреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП StoreConnector рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ ред рдЕрдм рдЬрдм рднреА рдЭрдВрдбрд╛ рдмрджрд▓рддрд╛ рд╣реИ (рдСрдирдЪреЗрдВрдЬ рд╡рд┐рдзрд┐ рдореЗрдВ), рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдЯреЙрдЧрд▓рдЗрдорд╕реНрдЯреИрдмреНрдпреВрд╢рди рдЗрд╡реЗрдВрдЯ рдХреЛ рдлрд╛рдпрд░ рдХрд░рддрд╛ рд╣реИред
рд╕рд╛рд░рд╛рдВрд╢
рд╡рд╣ рд╕рдм рд╣реИ! рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдордиреЗ рдПрдХ рд╕рд░рд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдпрд╛, рдЬреЛ рдЦрд░реАрджрд╛рд░реА рд╕реВрдЪреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ Redux рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдбреВрдм рдЬрд╛рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ, рд╣рдо рддрддреНрд╡реЛрдВ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдХреА рд╕реНрдерд┐рддрд┐ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдирдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдирдИ рдХреНрд░рд┐рдпрд╛рдУрдВ рдФрд░ рд░рд┐рдбреНрдпреВрд╕рд░ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЬрд┐рддрдирд╛ рдЖрд╕рд╛рди рд╣реИред
рдпрд╣рд╛рдВ рдЖрдк рдЯрд╛рдЗрдо рдЯреНрд░реЗрд╡рд▓ рд╡рд┐рдЬреЗрдЯ рд╕рд╣рд┐рдд рдЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ:
рдЖрд╢рд╛ рд╣реИ рдЖрдкрдХреЛ рдпрд╣ рдкреЛрд╕реНрдЯ рдЕрдЪреНрдЫреА рд▓рдЧреА рд╣реЛрдЧреА!