Redux: рдХрдиреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдкреБрди: рд░реЗрдВрдбрд░рд┐рдВрдЧ рдирд╣реАрдВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдШрдЯрдХ ()

рдХреЛ рдирд┐рд░реНрдорд┐рдд 20 рдЕрдЧре░ 2015  ┬╖  32рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: reduxjs/redux

рдбреЙрдХреНрд╕ рдХреЛ рдкрдврд╝рдХрд░ рдореБрдЭреЗ Redux рдХрд╛ рдкрддрд╛ рдЪрд▓ рд░рд╣рд╛ рд╣реИ рдФрд░ рдореИрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд▓рд┐рдП GitHub HTTP API рдХреЙрд▓ рдХреА рдЕрджрд▓рд╛-рдмрджрд▓реА рдХреА рд╣реИ, рдФрд░ рдореЗрд░реЗ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЕрдиреБрд░реВрдк рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рд░реЗрдкреЛ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреА рдЕрджрд▓рд╛-рдмрджрд▓реА рдХреА рд╣реИред рдЕрдм рддрдХ, рдмрд╣реБрдд рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд╣реИ рдирд╛?

рдпрд╣рд╛рдБ рдореИрдВ рдореБрд╕реАрдмрдд рдореЗрдВ рдЪрд▓ рд░рд╣рд╛ рд╣реВрдБ:

рдореЗрд░реЗ API рдХреЙрд▓ рд╕рдлрд▓ рд╣реЛ рд░рд╣реЗ рд╣реИрдВ, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ JSON рдКрдВрдЯ рдФрд░ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рд╣реЛ рд░рд╣реА рд╣реИ, _but_ рдореЗрд░реЗ рдШрдЯрдХ рдПрдкреАрдЖрдИ рдЕрдиреБрд░реЛрдз рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдлрд┐рд░ рд╕реЗ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред USER_REQUEST рдмрд╛рдж USER_SUCCESS рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреА рдЕрдЧрд▓реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ entities рдХреБрдВрдЬреА рд╢рд╛рдорд┐рд▓ рд╣реЛрддреА рд╣реИ:

pasted_image_8_19_15__3_27_pm

рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реЛрдЧрд╛ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдореЗрдВ рд╣реИ, рд╣реИ рдирд╛? рдореБрдЭреЗ рд╕реНрдЯреЛрд░ рдореЗрдВ рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╕реЗ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХрд╛ рднрдВрдбрд╛рд░рдг рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдШрдЯрдХ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╣рд╛рдВ?

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдХрд╣рд╛рдБ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреНрд░рд╛рдкреНрдд рдФрд░ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдбреЗрдЯрд╛ _actually_ рд╕реНрдЯреЛрд░ рдореЗрдВ рдбрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ? рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕реЗ рдХрд╣рд╛рдВ рд╕рд╛рдорд╛рдиреНрдп рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрд╕ рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╕реНрдЯреЛрд░ рдореЗрдВ рдирд╣реАрдВ рдкрд╣реБрдВрдЪрд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж!

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

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

рддреЛ рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрдкрдХреЗ reducers рдХреА рдЬрд╛рдБрдЪ рдХрд░реВрдБрдЧрд╛ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реВрдБрдЧрд╛ рдХрд┐ рдЖрдк рдореМрдЬреВрджрд╛ рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрджрд▓ рдирд╣реАрдВ рд░рд╣реЗ рд╣реИрдВред рдЙрдореНрдореАрдж рд╣реИ рдХреА рд╡реЛ рдорджрдж рдХрд░рджреЗ!

рд╕рднреА 32 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

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

рддреЛ рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрдкрдХреЗ reducers рдХреА рдЬрд╛рдБрдЪ рдХрд░реВрдБрдЧрд╛ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реВрдБрдЧрд╛ рдХрд┐ рдЖрдк рдореМрдЬреВрджрд╛ рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрджрд▓ рдирд╣реАрдВ рд░рд╣реЗ рд╣реИрдВред рдЙрдореНрдореАрдж рд╣реИ рдХреА рд╡реЛ рдорджрдж рдХрд░рджреЗ!

@Ernieturner рдиреЗ рдЬреЛ рдХрд╣рд╛ рдЙрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХреЗ connect(mapStateToProps)(YourConnectedComponent) рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ mapStateToProps рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╕реНрдерд┐рддрд┐ рдХрд╛ рдирдХреНрд╢рд╛ рдмрдирд╛рддрд╛ рд╣реИ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ entities ) рддрд╛рдХрд┐ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рдШрдЯрдХ рд╕реБрди рд░рд╣рд╛ рд╣реИ рд░рд╛рдЬреНрдп рдХреЗ рдЙрд╕ рдЯреБрдХрдбрд╝реЗ рдХреЛред

рдпрд╣ рднреА рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ connect() рдПрдХ рдЙрдерд▓реЗ рддреБрд▓рдирд╛ рдХрд░рддрд╛ рд╣реИ: https://github.com/rackt/react-redux/blob/d5bf492ee35ad1be8ffd5fa6be6cd6df3b41e/src/compenders/createConnect.js#L91

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

рдЖрд╣, рд╕рдордЭ рдЧрдпрд╛! рдореЗрд░рд╛ mapStateToProps рдПрдХ рд╡рд╕реНрддреБ рдХреЛ рд░рд╛рдЬреНрдп рд╕реЗ рдирд┐рдХрд╛рд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╕рд╣реА рдХреБрдВрдЬреА рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рдерд╛ред entities.users[login] рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдореИрдВрдиреЗ рдЗрд╕реЗ entities.users[id] рд╕реЗрдЯ рдХрд┐рдпрд╛ рдерд╛ред entities.users рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ login рд╕реНрдЯреНрд░рд┐рдВрдЧ рджреНрд╡рд╛рд░рд╛ рдХреБрдВрдЬреАрдмрджреНрдз рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдЬрдм рд╕рдВрдЦреНрдпрд╛рддреНрдордХ id рдирд╣реАрдВ рдорд┐рд▓рд╛ рдерд╛, рддреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдИ рднреА рдкреНрд░реЙрдк рдирд╣реАрдВ рдмрджрд▓рд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдкреБрди: рд░реЗрдВрдбрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереАред

рдЖрдк рд╕рдм рдХрд╛ рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрд╕ рд╕рдордп рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рдЖрдкрдиреЗ рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рд▓рд┐рдпрд╛ рдерд╛ред

@timdorr
рдХреНрдпрд╛ рдмрдХрд╡рд╛рд╕ рд╣реИред connect() рдЧрд╣рд░реЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдмрд╛рдзреНрдп рдХрд░реЗрдВ? рдЕрдиреНрдпрдерд╛ рдХрд┐рд╕реА рдХреЛ рд░рд╛рдЬреНрдп рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЧрд╣рд░реЗ рд╕реНрддрд░ рдХреЗ рд▓рд┐рдП рджрд░реНрдЬрдиреЛрдВ рдХрдВрдЯреЗрдирд░ рдШрдЯрдХ рдмрдирд╛рдиреЗ рдкрдбрд╝рддреЗ рд╣реИрдВред рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реИ

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

рдпрджрд┐ рдЖрдкрдХреЛ рд░рд╛рдЬреНрдп рдХреА рдПрдХ рдЬрдЯрд┐рд▓ рдХреНрд╡реЗрд░реА рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЙрд╕ рдЧрддрд┐ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП reselect рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

@timdorr @wzup

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

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

рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рд░рд╛рдЬреНрдп рдХреЗ рдПрдХ рдмрдбрд╝реЗ рдиреЗрд╕реНрдЯреЗрдб рдЯреБрдХрдбрд╝реЗ рдореЗрдВ рдПрдХ рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп рдШрдЯрдХ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдЙрдерд▓реЗ рддреБрд▓рдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рд┐рд░реНрдл _even рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рдЖрдкрдХреЗ reducers рдореМрдЬреВрджрд╛ рд░рд╛рдЬреНрдп рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдореНрдпреВрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рдирдпрд╛ рд░рд╛рдЬреНрдп рд╡рд╛рдкрд╕ рдХрд░ рджреЗрддреЗ рд╣реИрдВред

@naw рдЙрд╕ рдЯрд┐рдк рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдореИрдВрдиреЗ рдПрдХ рдирдпрд╛ рд░рд┐рдбреНрдпреВрд╕рд░ рдЬреЛрдбрд╝рдирд╛ рд╕рдорд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╣рд╛рдБ рдореИрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рдерд╛:

const reducers = combineReducers({
    //...bunch of reducers which always return objects of 3 or 4 properties that change sometimes but
    // the shape stays the same
    dataVersion: (state = Symbol(), action = {}) => {
        switch (action.type) {
            case SAME_ACTION_AS_THE_ONE_THAT_UPDATES_A_COMPLEX_PROPERTY:
            case ANOTHER_ACTION_THAT_ALSO_UPDATES_A_COMPLEX_PROPERTY:
                return Symbol():
            default:
                return state;
        }
    }
})

рдпрд╣ рдЕрднреА рднреА рдореБрдЭреЗ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ред рдЕрдЧрд░ рдореБрдЭреЗ рдПрдХ reducer рдорд┐рд▓рд╛ рд╣реИ рдЬреЛ рдЬрд╛рддрд╛ рд╣реИ:

    switch (action.type) {
       case UPDATE_THIS:
           return {a: action.a, b: action.b, c: action.c};
       default:
           return state;
     }

рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВ рдПрдХ рдирдИ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬреНрдб рд╡рд╕реНрддреБ рд▓реМрдЯрд╛ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдХрд┐ рд╕рд┐рд░реНрдл рдЙрд╕реА рдЖрдХрд╛рд░ рдХреА рд╣реЛрддреА рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдкрд┐рдЫрд▓реЗ рд░рд╛рдЬреНрдп рдореЗрдВ previousState !== newState рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдЧрд░ рдореБрдЭреЗ рд╣рд░ рдмрд╛рд░ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдбреЗрдЯрд╛ рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рдП, рддреЛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдкрд╣рдЪрд╛рди рдХреЗ рдмрдЬрд╛рдп рдЖрдХрд╛рд░ рдХреА рдЙрдерд▓реА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЕрдХреНрд╖рдо рд╣реИред (рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ Redux рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдпрд╣ рддрдереНрдп рд╣реИ рдХрд┐ рдореЗрд░рд╛ Symbol рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХрд╛рд░реНрдп рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЪрд▓ рд░рд╣рд╛ рд╣реИ)

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

@Zacqary рдкрд┐рдЫрд▓реЗ рд░рд╛рдЬреНрдп рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреА рддреБрд▓рдирд╛ рд╕рдЦреНрдд рд╕рдорд╛рди (===) рдХреЗ рд╕рд╛рде рдХреА рдЬрд╛рддреА рд╣реИред рд░рд╛рдЬреНрдпрдкреНрд░реЙрдкреНрд╕ рдХреА рддреБрд▓рдирд╛ (рдореЗрдкрд╕реНрдЯреЗрдЯрдЯреЙрдкреНрд░реЙрдкреНрд╕ рдХрд╛ рдкрд░рд┐рдгрд╛рдо) рдЙрдерд▓реЗ рдмрд░рд╛рдмрд░ рдХреЗ рд╕рд╛рде рдХреА рдЬрд╛рддреА рд╣реИред

@Zacqary

mapStateToProps рд╕реНрдЯреЛрд░ рдореЗрдВ рдкрд╣реБрдВрдЪрдХрд░ рдЕрдкрдиреЗ рдЬреБрдбрд╝реЗ рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ "рдХреЛрдбрд╛рдВрддрд░рдг" рдХрд░ рд░рд╣рд╛ рд╣реИред

mapStateToProps рд╡рд┐рднрд┐рдиреНрди рдЯреБрдХрдбрд╝реЗ (рдУрдВ) рдХреЛ рд╕реНрдЯреЛрд░ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдирдП stateProps рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░рддрд╛ рд╣реИред

рдкрд░рд┐рдгрд╛рдореА stateProps рд╡рд╕реНрддреБ рд╣рд░ рдмрд╛рд░ рдирдИ рд╣реЛрдЧреА (рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреА рдкрд╣рдЪрд╛рди рдмрджрд▓рддреА рд╣реИ), рдЗрд╕рд▓рд┐рдП рд╣рдо рдХреЗрд╡рд▓ stateProps рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╡рд╕реНрддреБ рдкрд╣рдЪрд╛рди рдХреА рддреБрд▓рдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ --- рд╣рдо _have_ рдПрдХ рдиреАрдЪреЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрддрд░ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдореВрд▓реНрдп рдХреА рд╡рд╕реНрддреБ рдкрд╣рдЪрд╛рди рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ, рдЬреЛ shallowEqual рдЦреЗрд▓ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ @jimbolla рдиреЗ рдХрд╣рд╛ред

рдЬрдм рдЖрдк reducers рдХреЛ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦрддреЗ рд╣реИрдВ рддреЛ рдЖрдорддреМрд░ рдкрд░ рд╕рдорд╕реНрдпрд╛рдПрдБ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВ, рддрд╛рдХрд┐ рд░рд╛рдЬреНрдп рдХреЗ рдЯреБрдХрдбрд╝реЗ рдХреА рд╡рд╕реНрддреБ рдкрд╣рдЪрд╛рди _does't change_, рдЬрдмрдХрд┐ рдХреБрдЫ рдиреЗрд╕реНрдЯреЗрдб рд╡рд┐рд╢реЗрд╖рддрд╛ рдЗрд╕рдХреЗ рднреАрддрд░ _does_ рдмрджрд▓ рдЬрд╛рддреА рд╣реИред рдпрд╣ рдирдП рд░рд╛рдЬреНрдп рдХреЛ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд░реВрдк рд╕реЗ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╕реНрдерд┐рддрд┐ рд╣реИ, рдЬреЛ react-redux рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓рд╛, рдЬрдм рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХреБрдЫ _did_ рдмрджрд▓ рдЬрд╛рдПред

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

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

рдХреНрдпрд╛ рдРрд╕рд╛ рдХреБрдЫ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИ рдЬреЛ рдЖрдк рд╕реЗ рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ? рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ Symbol рд╡рд░реНрдХ рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИред

рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рдШрдЯрдХ рдХреЛ рдмрд╕ рд╕рд╣рд╛рд░рд╛ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП connected() рдШрдЯрдХ рдореЗрдВ рдиреАрдЪреЗ рд▓реЗ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореБрдЭреЗ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ connect() рджреЛ рдШрдЯрдХреЛрдВ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдХреЗ рдорд┐рд▓рд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЬрдЯрд┐рд▓рддрд╛ рдереАред

@ernieturner рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкреБрд░рд╛рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЕрдкрдиреЗ рд╕рдорд╕реНрдпрд╛ рдирд┐рд╡рд╛рд░рдг рдЕрдиреБрднрд╛рдЧ рд▓рд┐рдВрдХ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВред

рдЪрд┐рдпрд░реНрд╕

рдореБрдЭреЗ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдереА, рдареАрдХ рдирд╣реАрдВред
рдореИрдВрдиреЗ рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЛ рд░рд╛рдЬреНрдп рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛, рдЬреИрд╕реЗ:

  constructor(props){
    this.state = {
      text: props.text
    }
  }

рдФрд░ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рдерд╛ред рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдкреНрд░реЙрдкреНрд╕ рд╕реЗ рд╕реАрдзреЗ рдореВрд▓реНрдп рд▓рд╛рдЧреВ рдХрд┐рдпрд╛

{this.props.text}

рдФрд░ рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ :)

@AlexanderKozhevin рдЬрдм рддрдХ рдореИрдВ рдЧрд▓рдд рдирд╣реАрдВ рд╣реВрдБ, рдЖрдкрдХрд╛ рдирд┐рд░реНрдорд╛рддрд╛ super(props) рдЧрд╛рдпрдм рд╣реИред
рдЖрдо рддреМрд░ рдкрд░ рдЖрдк рднреА рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ this рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЖрдк рдлреЛрди super(props) ред

@ cdubois-mh рдЖрдк рд╕рд╣реА рд╣реИрдВ, рдиреЛрдЯ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдореИрдВрдиреЗ рдХрд╕реНрдЯрдо-рдирд┐рд░реНрдорд┐рдд рдРрдк рд░реВрдЯ reducer рд▓рд┐рдЦрд╛ рд╣реИ рдФрд░ рдЙрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реВрдВред
рдкреВрд░реЗ рд░рд╛рдЬреНрдп рдХреА рдПрдХ рдкреНрд░рддрд┐ рд▓реМрдЯрд╛ рджреЗрдирд╛
{...state}
рдЬрдбрд╝ reducer рдХреЗ рдЕрдВрдд рдореЗрдВ рдореЗрд░реЗ рд▓рд┐рдП рдорджрдж рдХреА

@daedalius рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ reducer рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред
рдпрджрд┐ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ, рдпрд╛ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╕рдВрд╢реЛрдзрд┐рдд рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рд░рд╛рдЬреНрдп рдХреА рдПрдХ рдкреНрд░рддрд┐ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рддреЛ рдЗрд╕реЗ рд░рд╛рдЬреНрдп рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпрджрд┐ рдЖрдк рдПрдХ рдкреНрд░рддрд┐ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╣рдореЗрд╢рд╛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдЧреА рдХрд┐ рдПрдХ рдореВрд▓реНрдп рдмрджрд▓ рдЧрдпрд╛ рд╣реИред
(рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдиреЗрд╕реНрдЯреЗрдб рдПрдВрдЯреНрд░реА рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ)

рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ:

{
    "clients": [
        { "name": "John", "cid": 4578 },
        { "name": "Alex", "cid": 5492 },
        { "name": "Bob",  "cid": 254 }
    ]
}

рдпрджрд┐ рдЖрдк рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛ рдирд╛рдо рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд░рд╛рдЬреНрдп рдХрд╛ рдХреЛрдИ рдХреНрд▓реЛрди рдирд╣реАрдВ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдиреЗ рд░рд╛рдЬреНрдп рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдЖрдкрдиреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕рд░рдгреА рдореЗрдВ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рд╣реИред

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

рдЕрдЧрд░ рдореИрдВ рдЧрд▓рдд рд╣реВрдВ, рддреЛ рдХреГрдкрдпрд╛ рдореБрдЭреЗ рд╕реБрдзрд╛рд░реЗрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд┐рдбреНрдпреВрд╕рд░ рд╕рдордЭрддрд╛ рд╣реВрдВред

рд╣рд╛рдВ, рдпрд╣ рд╕рд╣реА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, @daedalius , рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЖрдк _always_ рдХреЛ state рдХреА рдЙрдерд▓реА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдирд╣реАрдВ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ - рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдпрд╣реА рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрджрд┐ рдХреБрдЫ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ, рдЕрдиреНрдпрдерд╛ рдЖрдк рдЕрдкрдиреЗ рдШрдЯрдХреЛрдВ рдХреЗ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдкреБрди: рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рд╕рд╛рде рд╣рд╡рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдмрд▓рдкреВрд░реНрд╡рдХ рдЬрд╛рдирдХрд╛рд░реА

<AfterConnect
    _forceUpdate={Symbol()}
/>

@BrookShuihuaLee рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ? рдЖрдкрдиреЗ рдЕрдкрдиреЗ рдХреЛрдб рдХреЗ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдпрд╛ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдирд╣реАрдВ рджрд┐рдпрд╛ред рдпрд╣ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ? рдпрд╣ рд╡рд░реНрддрдорд╛рди рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдХреНрдпреЛрдВ рд╣реИ?

@CedSharp shallowEqual рд╕рдорд╛рд░реЛрд╣ рдЕрд╡рд╛рд╕реНрддрд╡рд┐рдХ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ, рдЕрдЧрд░ рд╣рдо рд╕реЗрдЯ _forceUpdate = {рдкреНрд░рддреАрдХ ()}

@BrookShuihuaLee рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдкрд╣рд▓реЗ рдЙрддреНрддрд░ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рд╢рд╛рдорд┐рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕ рддрд░рд╣ рд╕реЗ рд▓реЛрдЧ рдЗрд╕реЗ рдмреЗрд╣рддрд░ рд╕рдордЭреЗрдВрдЧреЗ ^ ^

@CedSharp рд╣рд╛рдБ

@BrookShuihuaLee : рдпрд╣ рдПрдХ рдмреБрд░реЗ рд╡рд┐рдЪрд╛рд░ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред рдЖрдк рдРрд╕рд╛ рдХреНрдпреЛрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реЛ?

@BrookShuihuaLee , рдореИрдВ рд╣реВрдВ ред
рдПрдХ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЬрдм рдЖрдк рд░рд╛рдЬреНрдп рдореЗрдВ рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рдХреНрд▓реЛрди рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЬрдм рддрдХ рдЖрдк рдПрдХ рд╡реИрдз рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдХрд╛ рд╕рдорд╛рдзрд╛рди рдЖрд╡рд╢реНрдпрдХ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдореИрдВ рджреГрдврд╝рддрд╛ рд╕реЗ рд╕рд▓рд╛рд╣ рджреВрдВрдЧрд╛ рдХрд┐ Redux рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

@CedSharp
@markerikson
рдХреНрдпреЛрдВрдХрд┐ рдШрдЯрдХ AfterConnect рдмрд╛рд░-рдмрд╛рд░ рдбрд┐рдЬрд╛рдЗрди рджреНрд╡рд╛рд░рд╛, рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЬрдм рдЗрд╕рдХреЗ рдореВрд▓ рдШрдЯрдХ рдХреЛ рдкреБрдирдГ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реЛ, рддреЛ рдЗрд╕реЗ рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рд░реЗрдВрдбрд░ рдХрд░рдирд╛ рдареАрдХ рд╣реИред рдореИрдВ рдореВрд▓ рдШрдЯрдХ рдореЗрдВ рд╕рднреА рд╕рдВрдЧрдгрдирд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдФрд░ AfterConnect рдХреЗ рд▓рд┐рдП рд╕рд╣рд╛рд░рд╛ рдХреЗ рдЯрди рд╕реЗрдЯ рдХрд░реЗрдВред

@BrookShuihuaLee , рдореБрдЭреЗ рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдЖрдкрдХрд╛ рдШрдЯрдХ рдХреИрд╕реЗ рдЪрд░реНрдЪрд╛ рдореЗрдВ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ?
рдЕрдЧрд░ рдореИрдВ рдареАрдХ рд╕реЗ рд╕рдордЭреВрдВ, рддреЛ рдЖрдк рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХрд╕реНрдЯрдо рдШрдЯрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ? ForceUpdate рдХреБрдЫ рдмрд╣реБрдд рджреГрдврд╝рддрд╛ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рджреБрдирд┐рдпрд╛ рдореЗрдВ рд╣рддреЛрддреНрд╕рд╛рд╣рд┐рдд рд╣реИ рдФрд░ рдореИрдВ рдЗрд╕реЗ рдПрдХ рд╕рдорд╛рдзрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдиреБрд╢рдВрд╕рд┐рдд рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ред

рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЖрдк рдПрдХ рдЕрд╡рд▓реЛрдХрди рдпреЛрдЧреНрдп рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдЖрдк рд░рд╛рдЬреНрдп рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрд╣реАрдВ рдФрд░ рдмрджрд▓рд╛рд╡ рдХреА рддрд▓рд╛рд╢ рдХрд░рддреЗ рд╣реИрдВ? рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЖрдкрдХреЛ рдЙрд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдШрдЯрдХ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ, рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рд░рд╛рдЬреНрдп рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдХреНрдпреЛрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рддреЛ рд╢рд╛рдпрдж рдЖрдк рдореЛрдмрд╛рдЗрд▓ рдЬреИрд╕реЗ рдХреБрдЫ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
(Https://github.com/mobxjs/mobx)

рдореИрдВ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЖрдкрдХрд╛ рд╕рдорд╛рдзрд╛рди рдХреНрдпрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХреНрдпреЛрдВ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред

@CedSharp рдореЗрд░рд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕рднреА рдХреЛ рдмрд▓рдкреНрд░рдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рд╕рд┐рдлрд╛рд░рд┐рд╢ рдПрдХ рдмрд╛рдд рд╣реИ, рдЪреБрдирд╛рд╡ рдПрдХ рдФрд░ рд╣реИред рд░рд┐рдПрдХреНрдЯрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП ReactComponent.prototype.forceUpdate рднреА рд░рдЦреЗрдВред рд▓реЛрдЧреЛрдВ рдХреЛ рд╡рд┐рдХрд▓реНрдк рдЪрд╛рд╣рд┐рдПред

рдореИрдВ рдПрдХ рдФрд░ рд╡рд┐рдХрд▓реНрдк рджреЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛ред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рди рд╣реЛред

рдЗрд╖реНрдЯрддрдо рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рднрд╛рдЧ рд▓рд┐рдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдРрдк рд░рд╛рдЬреНрдп рдХреЛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рд╕рдВрд░рдЪрд┐рдд рдХрд┐рдпрд╛ рд╣реИред рдореБрдЭреЗ рд░рд╛рдЬреНрдп рдХреЗ рд╕реНрд▓рд╛рдЗрд╕ рдкрд░ рдПрдХ рдЙрдерд▓реЗ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдХреЗ рдЙрдерд▓реЗ рддреБрд▓рдирд╛ рдореБрджреНрджреЗ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдорд┐рд▓рд╛ рдЬреЛ рдореБрдЭреЗ рдкрд░реЗрд╢рд╛рди рдХрд░ рд░рд╣рд╛ рдерд╛ред

case SOME_ACTION:
      return {
        ...state,
        ts: (new Date).getTime(),
      };

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

рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕рдХреНрд░рд┐рдп рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдПрдХ рдЙрдерд▓реЗ рддреБрд▓рдирд╛, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рдЧрд╣рд░реА рдиреЗрд╕реНрдЯреЗрдб рд╕реНрдерд┐рддрд┐ рдкрд░ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

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

рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдЗрд╕рдХреЗ рднреАрддрд░ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд╕реНрддреБ рдереАред рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдЙрдерд▓реА рддреБрд▓рдирд╛ рдереА, рдпрд╣ рдХрднреА рднреА рдмрд╛рд▓ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рднреАрддрд░ рд╡рд╕реНрддреБрдУрдВ рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪреАред рдореИрдВрдиреЗ рдЗрд╕реЗ list:state.obj.list lists:state.obj

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

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

рдЕрдкрдиреЗ рд▓рд╛рд▓ рдореЗрдВ TYPOS рдХреЗ рд▓рд┐рдП рдЪреЗрдХ! :)

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

ms88privat picture ms88privat  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jimbolla picture jimbolla  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

amorphius picture amorphius  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

cloudfroster picture cloudfroster  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

vraa picture vraa  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ