MobX рдпрд╛ Redux: рдЬреЛ рд░рд┐рдПрдХреНрдЯ рд╕реНрдЯреЗрдЯ рдореИрдиреЗрдЬрдореЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реИ?



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

рдЖрдЗрдП рдкрд╣рд▓реЗ рджреЛрдиреЛрдВ рдХреЗ рдмреАрдЪ рдЖрдо рдмрд╛рддреЛрдВ рдкрд░ рдПрдХ рдирдЬрд░ рдбрд╛рд▓рддреЗ рд╣реИрдВ:

1) рджреЛрдиреЛрдВ рд╕рдордп-рдпрд╛рддреНрд░рд╛ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ
2) рджреЛрдиреЛрдВ рдореЗрдВ рдУрдкрди-рд╕реЛрд░реНрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИрдВ
3) рджреЛрдиреЛрдВ рдПрдХ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рд░рд╛рдЬреНрдп рдкреНрд░рдмрдВрдзрди рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ
4) рджреЛрдиреЛрдВ рд░рд┐рдПрдХреНрдЯ рджреЗрд╢реА рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП рднрд╛рд░реА рд╕рдорд░реНрдерди рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ

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

-> рд░рдЦрд░рдЦрд╛рд╡ рдФрд░ рд╕реНрдХреЗрд▓реЗрдмрд▓

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

-> рдбрд┐рдмрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛

Mobux рдХреА рддреБрд▓рдирд╛ рдореЗрдВ Redux рдореЗрдВ рдбрд┐рдмрдЧрд┐рдВрдЧ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЕрдиреБрднрд╡ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рднрдпрд╛рдирдХ рдбреЗрд╡рд▓рдкрд░ рдЯреВрд▓ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХрдо рдЕрдореВрд░реНрддрддрд╛ рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИред рдлреНрд▓рдХреНрд╕ рдкреНрд░рддрд┐рдорд╛рди рдХреЗ рд╕рд╛рде, Redux рдЕрдзрд┐рдХ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рдпреЛрдЧреНрдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рджреВрд╕рд░реА рдУрд░, рдЕрдзрд┐рдХ рдЕрдореВрд░реНрддрддрд╛ рдФрд░ рдФрд╕рдд рдбреЗрд╡рд▓рдкрд░ рдЯреВрд▓ рдХреЗ рдХрд╛рд░рдг, MobX рдореЗрдВ рдбрд┐рдмрдЧрд┐рдВрдЧ рдмрд╣реБрдд рдХрдард┐рди рд╣реИред

-> рд╕реАрдЦрдиреЗ рдХреА рдЕрд╡рд╕реНрдерд╛

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

-> рд╕рдореБрджрд╛рдп

Mobux рдХреА рддреБрд▓рдирд╛ рдореЗрдВ Redux рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рд╕рд╛рдореБрджрд╛рдпрд┐рдХ рдЖрдзрд╛рд░ рд╣реИред рдЗрд╕рд▓рд┐рдП, Redux рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдХрд┐рд╕реА рднреА рд╕реНрдерд╛рди рдкрд░ рдХрднреА рднреА рдорд╣рд╛рди рд╕рд╛рдореБрджрд╛рдпрд┐рдХ рд╕рд╣рд╛рдпрддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

-> рд╢реБрджреНрдз рдмрдирд╛рдо рдЫреЛрдЯрд╛

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

-> рдЕрд╡рд▓реЛрдХрди рдпреЛрдЧреНрдп рдмрдирд╛рдо рд╕рд╛рджрд╛ рдбреЗрдЯрд╛

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

-> рд╕реНрдЯреЛрд░

рдПрдХ рд╕реНрдЯреЛрд░ рдПрдХ рдРрд╕реА рдЪреАрдЬрд╝ рд╣реИ рдЬрд╣рд╛рдБ рдбреЗрдЯрд╛ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред MobX рдХреЗ рдкрд╛рд╕ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд╕реНрдЯреЛрд░ рд╣реИрдВ рдЬрд╣рд╛рдВ рдпреЗ рд╕реНрдЯреЛрд░ рддрд╛рд░реНрдХрд┐рдХ рд░реВрдк рд╕реЗ рдЕрд▓рдЧ рд╣реИрдВред рджреВрд╕рд░реА рдУрд░, Redux рдХреЗ рдкрд╛рд╕ рдПрдХ рдмрдбрд╝рд╛ рд╕реНрдЯреЛрд░ рд╣реИ рдЬрд╣рд╛рдВ рд╕рднреА рд░рд╛рдЬреНрдп рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИрдВред рдбреЗрдЯрд╛ рдХреЛ рдЖрдорддреМрд░ рдкрд░ Redux рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ MobX рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рдЕрд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред

Redux рдмрдирд╛рдо MobX: рдХреЛрдб рддреБрд▓рдирд╛

рдЗрдВрдЬреЗрдХреНрд╢рди рдЗрдВрдЬреЗрдХреНрд╢рди

React-redux рдХрд╛ рдХрдиреЗрдХреНрдЯ () рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ Redux рдореЗрдВ рдкреНрд░реЙрдкреНрд╕ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреЗрдЯ рдФрд░ рдПрдХреНрд╢рди рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕реЗ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:

// рдПрдХреНрд╕реЗрд╕рд┐рдВрдЧ рдкреНрд░реЙрдкреНрд╕

<ContactForm contact={this.props.contact} loading={this.props.loading} onSubmit={this.submit} /> 


// рд░рд╛рдЬреНрдп рдХреЛ рдкреНрд░реЙрдкреНрд╕ рдореЗрдВ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп

 function mapStateToProps(state) { return { contact: state.contactStore.contact, errors: state.contactStore.errors } } 


// рд░рд╛рдЬреНрдп рдФрд░ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдкреНрд░реЙрдкреНрд╕ рдореЗрдВ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдирд╛

 export default connect(mapStateToProps, { newContact, saveContact, fetchContact, updateContact })(ContactFormPage); 


MobX рдореЗрдВ, рд╕реНрдЯреЛрд░ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрдЬреЗрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдкреНрд░реЙрдкреНрд╕ рдореЗрдВ рд╕реНрдЯреЛрд░ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдПрдЧрд╛ред рдпрд╣рд╛рдВ, рд░рд╛рдЬреНрдп рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реНрдЯреЛрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдЧреБрдгреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧ рд╕реЗ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рди рд╣реЛред

 @inject("stores") @observer // injecting store into props class ContactFormPage extends Component { тАж // accessing store via props const { contactStore:store } = this.props.stores; return ( <ContactForm store={store} form={this.form} contact={store.entity} /> ) тАж } 


рдЗрд╕рд▓рд┐рдП, рд╣рдордиреЗ Redux-connect-рдбреЗрдХреЛрд░реЗрдЯрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ Redux рдХреЛрдб рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдФрд░ MobX рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдкрдврд╝рдирд╛ рд╣рдореЗрд╢рд╛ рдЖрд╕рд╛рди рд╣реИред рдЗрд╕рд▓рд┐рдП, рдРрд╕рд╛ рдХреЛрдИ рд╕реНрдкрд╖реНрдЯ рд╡рд┐рдЬреЗрддрд╛ рдирд╣реАрдВ рд╣реИред

рдмреВрдЯрд╕реНрдЯреНрд░реИрдкрд┐рдВрдЧ

Redux рдореЗрдВ, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕реНрдЯреЛрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ рдФрд░ рдРрдк рдкреНрд░рджрд╛рддрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ redux-thunk рдФрд░ redux-рд╡рд╛рджрд╛-рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреЛ рднреА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕рдХреЗ рдмрд╛рдж, Redux-devtools-extension рд╕рдордп-рдпрд╛рддреНрд░рд╛ рдореЛрдб рдореЗрдВ рдбрд┐рдмрдЧрд┐рдВрдЧ рд╕реНрдЯреЛрд░ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

 import { applyMiddleware, createStore } from "redux"; import thunk from "redux-thunk"; import promise from "redux-promise-middleware"; import { composeWithDevTools } from 'redux-devtools-extension'; import rootReducer from "./reducers"; const middleware = composeWithDevTools(applyMiddleware(promise(), thunk)); export default createStore(rootReducer, middleware); 


// src / index.js

 ReactDOM.render( <BrowserRouter> <Provider store={store}> <App /> </Provider> </BrowserRouter>, document.getElementById('root') ); 


MobX рдореЗрдВ, рдХрдИ рд╕реНрдЯреЛрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдпрд╣ async рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рд╣рд░реА рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдб рдХреА рдХреЗрд╡рд▓ рдХреБрдЫ рд▓рд╛рдЗрдиреЗрдВред Redux-devtools-extension рдбрд┐рдмрдЧрд┐рдВрдЧ рдЯреВрд▓ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ mobx-remotedev рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред



 import remotedev from 'mobx-remotedev'; import Store from './store'; const contactConfig = { name:'Contact Store', global: true, onlyActions:true, filters: { whitelist: /fetch|update|create|Event|entity|entities|handleErrors/ } }; const contactStore = new Store('api/contacts'); const allStores = { contactStore: remotedev(contactStore, contactConfig) }; export default allStores; 


// src / index.js

 ReactDOM.render( <BrowserRouter> <Provider stores={allStores}> <App /> </Provider> </BrowserRouter>, document.getElementById('root') ); 


рджреЛрдиреЛрдВ рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд рдХреЛрдб рдХреА рдорд╛рддреНрд░рд╛ рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕рдорд╛рди рд╣реИред рд▓реЗрдХрд┐рди, MobX рдореЗрдВ рдХрдо рдЖрдпрд╛рдд рд╡рд┐рд╡рд░рдг рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдФрд░ рдкреБрди: рдкреНрд░реЗрд╖рд┐рдд рдХрд░рдирд╛

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЗ рджреНрд╡рд╛рд░рд╛ Redux рдореЗрдВ рдХреНрд░рд┐рдпрд╛рдПрдБ рдФрд░ рдкреБрдирдГ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

// рдХреНрд░рд┐рдпрд╛

 export function fetchContacts(){ return dispatch => { dispatch({ type: 'FETCH_CONTACTS', payload: client.get(url) }) } } 


// рд░рд┐рдбреНрдпреВрд╕рд░

 switch (action.type) { case 'FETCH_CONTACTS_FULFILLED': { return { ...state, contacts: action.payload.data.data || action.payload.data, loading: false, errors: {} } } case 'FETCH_CONTACTS_PENDING': { return { ...state, loading: true, errors: {} } } case 'FETCH_CONTACTS_REJECTED': { return { ...state, loading: false, errors: { global: action.payload.message } } } } 


рдХрд╛рд░реНрд░рд╡рд╛рдИ рдФрд░ reducer рдХреЗ рд▓рд┐рдП рддрд░реНрдХ MobX рдореЗрдВ рдПрдХ рд╡рд░реНрдЧ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ OOP рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рд╕реНрдЯреЛрд░ рдХреНрд▓рд╛рд╕ рдХреЛ рдХреНрд▓рд╛рд╕ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдИ рд╕реНрдЯреЛрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд┐рдлрд▓реЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдВрдмрдВрдзрд┐рдд рдХреЛрдб рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:

 @action fetchAll = async() => { this.loading = true; this.errors = {}; try { const response = await this.service.find({}) runInAction('entities fetched', () => { this.entities = response.data; this.loading = false; }); } catch(err) { this.handleErrors(err); } } 


рдЗрд╕рд▓рд┐рдП, рд╣рдордиреЗ рджреЗрдЦрд╛ рд╣реИ рдХрд┐ рджреЛрдиреЛрдВ рд░рд╛рдЬреНрдп рдкреНрд░рдмрдВрдзрди рд╕рдорд╛рдзрд╛рдиреЛрдВ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рддрд░реНрдХ рдПрдХ рд╣реА рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдЕрдВрддрд░ рдХреЗрд╡рд▓ рдЗрддрдирд╛ рд╣реИ рдХрд┐ рд╣рдордиреЗ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Redux рдореЗрдВ рдХреЛрдб рдХреА 33 рд▓рд╛рдЗрдиреЛрдВ рдФрд░ MobX рдореЗрдВ рдХреЛрдб рдХреА 14 рд▓рд╛рдЗрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЖрдк MobX рдХреЗ рд╕рд╛рде рддреЗрдЬреА рд╕реЗ рдРрдкреНрд╕ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред

рд░рд┐рдПрдХреНрдЯ рдРрдкреНрд╕ рдХреЗ рд▓рд┐рдП MobX рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд░реЗрдВ?

MobX рдПрдХ рдкрд░реАрдХреНрд╖рд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ рдЬреЛ рдкрд╛рд░рджрд░реНрд╢реА рд░реВрдк рд╕реЗ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ (TFRP) рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдХреЗ рд░рд╛рдЬреНрдп рдкреНрд░рдмрдВрдзрди рдХреЛ рд╕рд░рд▓ рдФрд░ рд╕реНрдХреЗрд▓реЗрдмрд▓ рдмрдирд╛рддрд╛ рд╣реИред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдФрд░ MobX рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╕рдВрдпреЛрдЬрди рд╣реИред

  • рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрдо рдХреЛрдб
  • рд╕реАрдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИ
  • рдиреЗрд╕реНрдЯреЗрдб рдбреЗрдЯрд╛ рдЖрд╕рд╛рди рд╣реИ
  • рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди


MobX рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ?

  • рдбрд┐рдмрдЧ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ
  • рдмреЗрд╣рддрд░ рд╡рд┐рдХрд▓реНрдк рдореМрдЬреВрдж рд╣реИрдВ
  • рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕реНрд╡рддрдВрддреНрд░рддрд╛ рджреЗрддрд╛ рд╣реИ


Redux рд░рд┐рдПрдХреНрдЯ рдРрдкреНрд╕ рдХреЗ рд▓рд┐рдП рдХреНрдпреЛрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ?

Redux рдПрдХ рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ UI рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ Angular, Vue, Ember, React & vanilla JS рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

  • рдмрд┐рдЪреМрд▓рд┐рдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░
  • рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рдФрд░ рд╕рдореБрджрд╛рдп
  • рдЯреВрд▓реАрдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди
  • рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдФрд░ рд╕рд░рд▓рддрд╛
  • рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рдФрд░ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдпрддрд╛
  • рдбреЗрдЯрд╛ рдФрд░ рдкреНрд░рд╕реНрддреБрддрд┐ рдХрд╛ рдкреГрдердХреНрдХрд░рдг


Redux рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддреЗ?

  • рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ (рд░рд┐рдбреНрдпреВрд╕рд░, рдЪрдпрдирдХрд░реНрддрд╛, рд╡рд┐рдЪрд╛рд░, рдПрдХреНрд╢рди рдкреНрд░рдХрд╛рд░, рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░, ...)
  • рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдЙрдирдХреЗ рдкреНрд░рднрд╛рд╡ рд╕реЗ рдЕрд▓рдЧ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ reducer рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)
  • рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯреНрд╕ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЖрдЙрдЯ-рдСрдл-рдж-рдмреЙрдХреНрд╕ рд╕рдорд╛рдзрд╛рди (рд░реЗрдбреНрдпреВ-рдердВрдХ рдпрд╛ рд░реЗрдбрдХреНрд╕-рд╕рд╛рдЧрд╛ рдЬреИрд╕реЗ рдмрд┐рдЪреМрд▓рд┐рдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдкрд▓рдмреНрдз)


рдЕрдВрддрд┐рдо рдиреЛрдЯ:

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

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

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

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


All Articles