рд▓реЛрдЧреЛрдВ рдХреЛ рд▓рдЧрд╛рддрд╛рд░ рдпрд╣ рдЖрднрд╛рд╕ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рд░рд┐рдПрдХреНрдЯ рд░рд╛рдЙрдЯрд░ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╛ рдХрд┐ рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░реЗрдбрдХреНрд╕-рд░рд┐рдПрдХреНрд╢рди-рд░рд╛рдЙрдЯрд░ рдЬреИрд╕реЗ рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдпрд╣ рд░рд┐рдПрдХреНрдЯ 0.14 рддрдХ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдЖрдк рд░рд┐рдПрдХреНрдЯ рд░рд╛рдЙрдЯрд░ 0.13 рдпрд╛ 1.0 рдХреЗ рд╕рд╛рде Redux рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдЬ рдХреА рддрд░рд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
(рдФрд░ рдпрд╣ Redux рдХреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рдмрд╛рдж рд╕реЗ рд╕рдЪ рдерд╛ред)
рд╕рдордп рдпрд╛рддреНрд░рд╛ рдЬреИрд╕реА рдХреБрдЫ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдЖрд░рдЖрд░ рдкрдХреНрд╖ рдкрд░ рдХреБрдЫ рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдпрд╣ рдореБрдЦреНрдп рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдП рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИред рд▓реЛрдЧ рдпрд╣ рд╕реЛрдЪрдХрд░ рднреНрд░рдорд┐рдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рдЖрдЬ рд░реВрдЯрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рдЬреЛ рдХрд┐ рдЧрд▓рдд рд╣реИред
рдЗрд╕ рд░реЗрдкреЛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рд░рд┐рдПрдХреНрдЯ рд░рд╛рдЙрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЖрдкрдХреЛ рдмрд╕ <Router>
рдХреЛ <Provider>
рдореЗрдВ рд▓рдкреЗрдЯрдирд╛ рд╣реИ, рдареАрдХ рдЙрд╕реА рддрд░рд╣ рдЬреИрд╕реЗ рдЖрдк рдЕрдкрдиреЗ рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп рдШрдЯрдХ рдХреЛ рд░рд╛рдЙрдЯрд░-рд░рд╣рд┐рдд рдРрдк рдореЗрдВ рд▓рдкреЗрдЯрддреЗ рд╣реИрдВред
рдпрджрд┐ рдЖрдк рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рд╕реЗ рдЯреНрд░рд╛рдВрдЬрд╝рд┐рд╢рди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рдХреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ router
рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдкрд╛рд╕ рдХрд░реЗрдВ, рдФрд░ рдЬрдм рдЪрд╛рд╣реЗрдВ рдЗрд╕рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВред рдпрджрд┐ рдЖрдк рд░реЗрдбрдХреНрд╕ рд╕реНрдЯреЛрд░ рд╕реЗ рд░рд╛рдЙрдЯрд░ рдХреА рд╕реНрдерд┐рддрд┐ рдкрдврд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдорд╛рд░реНрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдкрд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╢реБрд░реВ рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд░реЗрдбреНрдпреВрд╕рд░ рд▓рд┐рдЦреЗрдВред рдЗрддрдирд╛ рд╣реА!
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд░реЗрдбрдХреНрд╕-рд░рд╛рдЙрдЯрд░ рдПрдХ рдЕрдзрд┐рдХ рдкреНрд░рд╛рдХреГрддрд┐рдХ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдЖрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдореЗрдВ рдПрдХ рдкреНрд░рдпреЛрдЧ рд╣реИ рдЬрд╣рд╛рдВ рдЖрдк рдХреЗрд╡рд▓ рдХрд╛рд░реНрд░рд╡рд╛рдИ рднреЗрдЬреЗрдВрдЧреЗ рдФрд░ рд╕реНрдЯреЛрд░ рд╕реЗ рд░рд╛рдЬреНрдп рдкрдврд╝реЗрдВрдЧреЗ рдЬреЛ рд░рд╛рдЙрдЯрд░ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдпрд╛ рдЗрд╕рдХреЗ рд╕реНрдерд┐рд░ рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП! рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдкреНрд░рдпреЛрдЧ рд╣реИред
рд╣рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ..
рдореИрдВрдиреЗ рдореВрд▓ рд░реВрдк рд╕реЗ рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╕рдВрджрд░реНрдн рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд░рд╛рдЙрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рд░реЗрдВрдбрд░рд┐рдВрдЧ рдЙрджрд╛рд╣рд░рдг рд▓рд┐рдЦрд╛ рдерд╛ред рдпрд╣ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд░рд╛рдЙрдЯрд░ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рд╕реНрд╡рдпрдВ рдХрд╛ рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдмрди рд╕рдХрддрд╛ рд╣реИред рд╢рд╛рдпрдж рд╣рдо рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рдПрдХ рдЕрдиреБрднрд╛рдЧ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ?
рд╕рд╛рде рд╣реА, рдЖрдк рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕рд╛ рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд░рд╛рдЙрдЯрд░ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ?
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП real-world
рдЙрджрд╛рд╣рд░рдг рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реЛрдЧрд╛ред рдЗрд╕ рддрд░рд╣ рдЖрдкрдХреЛ рдЦрд░реЛрдВрдЪ рд╕реЗ рдХреБрдЫ рднреА рдмрдирд╛рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИред
рдпрджрд┐ рдЖрдк рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рд╕реЗ рдЯреНрд░рд╛рдВрдЬрд╝рд┐рд╢рди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд░рд╛рдЙрдЯрд░ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рдХреЛ рдкрд╛рд╕ рдХрд░реЗрдВ
рдмрд╕ рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдпрд╣ рдХреЗрд╡рд▓ 0.13 рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ 1.0beta рдореЗрдВ createRouter
рдЕрд╡рдзрд╛рд░рдгрд╛ рдирд╣реАрдВ рд╣реИ (рдЕрднреА рддрдХ?), рд╕рд╣реА?
рдЖрдк рдЗрд╕реЗ рдЕрдкрдиреЗ рд░рд┐рдПрдХреНрдЯ рдШрдЯрдХреЛрдВ рдХреЗ рднреАрддрд░ рд╕реЗ 1.0.0-рдмреАрдЯрд╛3 рдХреЗ рд╕рд╛рде рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
class Thing extends Component {
static contextTypes = {
router: PropTypes.object
}
handleThing() {
this.props.actionCreator(this.context.router);
}
}
@timdorr рдХреНрдпрд╛ this.context
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ? рдореИрдВ рдЗрд╕ рдзрд╛рд░рдгрд╛ рдХреЗ рддрд╣рдд рдерд╛ рдХрд┐ рдпрд╣ рдмрд╛рд╣рд░реА рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдерд╛ред
рд╣рд╛рдВ, рдпрд╣ рд╕рд┐рд░реНрдл рдЕрдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИ, рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИред рдпрд╣ 0.14 рдореЗрдВ рдереЛрдбрд╝рд╛ рдмрджрд▓ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рдХрд┐ рдпрд╣ рдЯреВрдЯ рдЬрд╛рдПред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЬрд▓реНрдж рд╣реА рдХрд┐рд╕реА рдмрд┐рдВрджреБ рдкрд░ рдкреНрд░рд▓реЗрдЦрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
@timdorr рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рднреА рд╣реИ рдХрд┐ 1.0.0-рдмреАрдЯрд╛3 рдореЗрдВ рдХрд┐рд╕реА рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рд╕реЗ рднрд┐рдиреНрди url рдореЗрдВ рд╕рдВрдХреНрд░рдордг рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ?
рд╣рд╛рдВ, рдпрджрд┐ рдЖрдк рд░рд╛рдЙрдЯрд░ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЗ рд╕рд╛рде рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕рдХреЗ рд╕рд╛рде рдЬреЛ рдЪрд╛рд╣реЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдЯреНрд░рд╛рдВрдЬрд╝рд┐рд╢рди рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред
рдореИрдВрдиреЗ рдЗрд╕реЗ рдПрдХ рд╕рд╛рде рдлреЗрдВрдХ рджрд┐рдпрд╛:
const loginProps = {
handleLogin: ({email, password}) => store.dispatch(userLogin({email, password})),
};
const routes = (
<Route path="/" handler={App}>
<Route path="login" handler={wrapper(Login, loginProps)} />
<Route handler={authSection}>
<Route path="" handler={Index} />
<Route path="users" handler={wrapper(Users, (() => store.dispatch(getUsers())))} />
<Route path="logout" handler={wrapper(Login, (() => store.dispatch(userLogout())))} />
</Route>
</Route>
);
const router = createRouter({
location: HistoryLocation,
routes,
});
store.dispatch(receiveRouter({router}));
Warning: Failed Context Types: Required context `store` was not specified in `SmartComponent(TodoApp)`. Check the render method of `Router`.
рдХреНрдпрд╛ рдЧрд▓рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?
рдкреБрдирд╢реНрдЪ: рдЖрд░рдЖрд░ 1.0.0-рдмреАрдЯрд╛3
@gyzerok рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдк рдкреВрд░реЗ () => <Router>stuff</Router>
рдХреЛ <Provider>
рдореЗрдВ рд▓рдкреЗрдЯрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ real-world
рдЙрджрд╛рд╣рд░рдг рдХрд░рддрд╛ рд╣реИред
@gaearon рд╣рд╛рдБ, ofcред рдореИрдВ рдЗрд╕реЗ рдкреНрд░рджрд╛рддрд╛ рдореЗрдВ рдирд╣реАрдВ рдмрд▓реНрдХрд┐ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдШрдЯрдХ рдореЗрдВ рд▓рдкреЗрдЯрддрд╛ рд╣реВрдВ рдЬреЛ рдЬреНрдпрд╛рджрд╛рддрд░ рдЖрдкрдХреЗ рдкреНрд░рджрд╛рддрд╛ рдХреА рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рд╣реИред рдлрд░реНрдХ рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕реНрдЯреЛрд░ рдкрд╛рд╕ рдирд╣реАрдВ рдХрд░рддрд╛, рдмрд▓реНрдХрд┐ рдЗрд╕рдХреЗ рдЕрдВрджрд░ рд╕реНрдЯреЛрд░ рдмрдирд╛рддрд╛ рд╣реВрдВред
@gyzerok рдпрд╣ рдХрд╣рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХрд┐ рдХреЛрдб рджреЗрдЦреЗ рдмрд┐рдирд╛ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реИред (рдФрд░ рдХреГрдкрдпрд╛ рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рджрд░реНрдЬ рдХрд░реЗрдВ, react-redux
рд░реЗрдкреЛ рдПрдХ рдЕрдЪреНрдЫреА рдЬрдЧрд╣ рд╣реИред)
real-wolrd
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП Thx! рд▓реЗрдХрд┐рди AsyncProps
рд╕реЗ рдХреИрд╕реЗ рдирд┐рдкрдЯреЗрдВ? рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдбрдмрд▓ рд╕рдВрджрд░реНрдн рд╣реЗрд░рдлреЗрд░ рдПрдХ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
import React from 'react';
import {createStore} from 'redux';
import {Provider} from 'react-redux';
import {Router, Route} from 'react-router';
import BrowserHistory from 'react-router/lib/BrowserHistory';
import AsyncProps from 'react-router/lib/experimental/AsyncProps';
import App from './containers/App';
import reducers from './reducers';
const store = createStoreWithMiddleware(reducers);
const history = new BrowserHistory();
React.render(
<Provider store={store}>
{() =>
<Router history={history} createElement={AsyncProps.createElement}>
<Route component={AsyncProps}>
<Route path="/" component={App} />
</Route>
</Router>
}
</Provider>,
document.body
);
рдФрд░ App.js
import React from 'react';
import {connect} from 'react-redux';
let App = React.createClass({
statics: {
loadProps(params, cb) {
// have to call this with AsyncProps
}
},
displayName: 'App',
render() {
return <div children="this is app" />
}
});
export default connect(state => state)(App);
рдпрд╣ connect
рд░реИрдкрд░ рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдХреЛрдИ redux
рднреА рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рд╣реИ?
рдпрд╛ рдбреЗрдЯрд╛ рд▓реЛрдб рд╣реЛрдиреЗ рддрдХ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХреЛ рд░реЛрдХрдиреЗ рдХрд╛ рдХреЛрдИ рдЕрдиреНрдп рддрд░реАрдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?
рд╕реНрдЯреИрдЯрд┐рдХреНрд╕ рд╕рд┐рд░реНрдл рд╕реНрдЯреИрдЯрд┐рдХреНрд╕ рд╣реИрдВред рдЖрдк рдЙрдиреНрд╣реЗрдВ connect()
рдкрд░рд┐рдгрд╛рдо рд╕рд╣рд┐рдд рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдкрд░ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред
let App = React.createClass({
displayName: 'App',
render() {
return <div children="this is app" />
}
});
App = connect(state => state)(App);
App.loadProps = function loadProps(params, cb) {
// have to call this with AsyncProps
}
export default App;
@gaearon рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИред рдореИрдВрдиреЗ рд▓рд╛рдкрддрд╛ рд╕реНрдЯреИрдЯрд┐рдХ рдкреНрд░реЙрдкреНрд╕ рдХреЗ рд╕рд╛рде connect
рдкрд░рд┐рдгрд╛рдо рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рд╕рдВрджрд░реНрдн рдХреЗ рд╕рд╛рде рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдорд╕реНрдпрд╛ред рдореБрдЭреЗ рдХреБрдЫ рд╕рдордп рджреЗрдВ, рдореИрдВ рдкреВрд░реЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдЕрд▓рдЧ рд░реЗрдкреЛ рдореЗрдВ рдбрд╛рд▓ рджреВрдВрдЧрд╛
рдПрдХ рдФрд░ рдЪреАрдЬ рдЬрд┐рд╕рдХреА рдореИрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЬрд╛рдВрдЪ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдПрдХ рд╕реНрдкрд╖реНрдЯ, рд╡рд┐рдиреАрдд рддрд░реАрдХреЗ рд╕реЗ рдПрдХ рд░реЗрдбрдХреНрд╕ рд╕реНрдЯреЛрд░ рдореЗрдВ рдкреИрд░рд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░ рд░рд╣рд╛ рд╣реИред рдХреБрдЫ рддрд░реАрдХреЛрдВ рдХреЛ рдЖрдЬрдорд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рд▓рд┐рдЦрдирд╛ рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдпрд╛:
<Route
component={OrderDetails}
path='/orders/:orderId'
onEnter={({params}) => store.dispatch(setCurrentOrder(params.orderId))}
/>
рдЗрд╕рд▓рд┐рдП рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рд╕реЗ рдкреИрд░рд╛ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдЬреИрд╕реЗ рдиреАрдЪреЗ:
export const OrderDetails = state => {
const {order} = state;
return {
order: order.details.get(order.currentOrderId),
orderId: order.currentOrderId,
isLoading: order.isLoadingDetails,
error: order.detailsLoadingError
};
};
рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реНрдерд┐рд░ react-redux-router
рдЬрд╛рд░реА рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдпрд╣ рд╕рдВрднрд╡рддрдГ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ред
рдЕрдЪреНрдЫреА рдЦрдмрд░: рд░рд┐рдПрдХреНрдЯ рд░рд╛рдЙрдЯрд░ 1.0 рдЖрд░рд╕реА рдЕрдм рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реБрдХ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддрд╛ рд╣реИред
https://github.com/acdlite/redux-react-router рджреЗрдЦреЗрдВ рдФрд░ рд╣рдореЗрдВ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдк рдЗрд╕реЗ рдЕрднреА рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ!
@gaearon рдореБрдЭреЗ react-router
рдФрд░ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ AsyncProps
рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдорд┐рд▓реАред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рд╕реЗ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИ
@wtfil рдЬрд╛рдирдХрд░ рдЕрдЪреНрдЫрд╛ рд▓рдЧрд╛!
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд░рд╛рдЙрдЯрд░ рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рдХрд░рддреЗ рд╕рдордп, рдореИрдВ рдЗрд╕ рдзрд╛рдЧреЗ рд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рд╣рдо рд░рд╛рдЙрдЯрд░ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЛ рдПрдХ рдПрдХреНрд╢рди рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕ рдкрд░ рдХреЙрд▓ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ рдпрд╣ рднреА рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рдХрд╛ рдЗрд░рд╛рджрд╛ рдЕрдкрдиреЗ рд╢реБрджреНрдзрддрдо рд░реВрдк рдореЗрдВ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИред рдПрдХрдорд╛рддреНрд░ рдорд╛рдорд▓рд╛ рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ рдЬрд╣рд╛рдВ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рдХреЛ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ, рдЬрдм рд╡реЗ рдорд┐рдбрд▓рд╡реЗрдпрд░ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреНрд░рд┐рдпрд╛рдПрдВ рд╣реИрдВред рдХреНрдпрд╛ рддрдм рдЙрдореНрдореАрдж рдХреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рдЬреЛ рдЯреНрд░рд╛рдВрдЬрд┐рд╢рди рдХрд░рддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рд╢реБрджреНрдз рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмрдЬрд╛рдп рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП?
рдХреНрдпрд╛ рддрдм рдЙрдореНрдореАрдж рдХреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рдЬреЛ рдЯреНрд░рд╛рдВрдЬрд┐рд╢рди рдХрд░рддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рд╢реБрджреНрдз рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмрдЬрд╛рдп рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП?
рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рдХреЛ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рд╣реЛрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред рдЬрдм рд╕рдВрднрд╡ рд╣реЛ рддреЛ рдЙрдирд╕реЗ рдмрдЪрдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрд┐рд╕реА рдмрд┐рдВрджреБ рдкрд░ рдЖрдкрдХреЛ рдЙрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рдЪреВрдВрдХрд┐ рд░реЗрдбреНрдпреВрд╕рд░ рд░реЗрдбрдХреНрд╕ рдореЗрдВ рд╢реБрджреНрдз рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрд▓реНрдо рдХреА рддрд░рд╣ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдкреНрд░рднрд╛рд╡ рддрдВрддреНрд░ рдирд╣реАрдВ рд╣реИ (рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП # 569 рджреЗрдЦреЗрдВ), рдПрдХреНрд╢рди рдирд┐рд░реНрдорд╛рддрд╛ рд╣реИрдВ рдЙрдиреНрд╣реЗрдВ рд▓рдЧрд╛рдиреЗ рдХреА рдЬрдЧрд╣ред
рд░реЗрдбрдХреНрд╕-рд░рд╛рдЙрдЯрд░ рджреЗрдЦреЗрдВред рдпрд╣ рд░рд┐рдПрдХреНрдЯ рд░рд╛рдЙрдЯрд░ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рднреЗрдЬрдиреЗ рджреЗрддрд╛ рд╣реИ рдФрд░ рд░рд╛рдЙрдЯрд░ рдХреЛ рд╕рд┐рдВрдХ рдХрд░рдиреЗ рдХрд╛ рдЦреНрдпрд╛рд▓ рд░рдЦрддрд╛ рд╣реИред
рд░рд┐рдПрдХреНрдЯ рд░рд╛рдЙрдЯрд░ рдФрд░ рд░реЗрдбрдХреНрд╕ рд░рд╛рдЙрдЯрд░ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдореЗрдВ рджреЛрдиреЛрдВ 1.0 рд╣рд┐рдЯ...
рд╣рд╛рдВред рдРрд╕рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╣рдо рдПрдХ рд░реЗрд╕рд┐рдкреА рдЬреЛрдбрд╝реЗрдВрдЧреЗред
рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕ рдЪрд░реНрдЪрд╛ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рднреА рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рд░реВрдЯрд┐рдВрдЧ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд░реЗрдбрдХреНрд╕ рдореЗрдВ рдХреИрд╕реЗ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ (рджреЗрдЦреЗрдВ https://github.com/rackt/redux/issues/805)ред рдЙрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рдХреБрдЫ рдЪрд░реНрдЪрд╛ рдФрд░ рдХреБрдЫ рдкреНрд░рдпреЛрдЧ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдореБрдЭреЗ рдПрдХ рдРрд╕рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдорд┐рд▓рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд░рд╛рдЙрдЯрд░/рд░рд┐рдПрдХреНрд╢рди-рд░реЗрдбрдХреНрд╕-рд░рд╛рдЙрдЯрд░ рдЧреЛрдВрдж рдХреЛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВред
рдореВрд▓ рд░реВрдк рд╕реЗ, рдореИрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд░рд╛рдЙрдЯрд░ рдпрд╛ рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рдХрд┐рд╕реА рднреА рдЬреНрдЮрд╛рди рдХреЛ рдлрд┐рд░ рд╕реЗ рдирд╣реАрдВ рджреЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЙрдиреНрд╣реЗрдВ рдПрдХ рдХрд╕реНрдЯрдо рдЗрддрд┐рд╣рд╛рд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рд░реВрдЯрд┐рдВрдЧ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ:
route
рдХреЗ рд▓рд┐рдП рд╕реНрдЯреЛрд░ рдореЗрдВ рдПрдХ рдХреНрд░рд┐рдпрд╛, рдПрдХ рд░реЗрдбреНрдпреВрд╕рд░ рдФрд░ рдПрдХ рдХреБрдВрдЬреА рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИредcreateHistory
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ createHashHistory
рдпрд╛ рдЬреЛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ) рдмрдирд╛рдпрд╛ рдФрд░ рд╕реБрдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрдм рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд╛рди рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдПрдХ рд░реВрдЯ рдХрд╛рд░реНрд░рд╡рд╛рдИ рднреЗрдЬреА рдЬрд╛рддреА рд╣реИ, рдЕрдВрддрддрдГ рд╕реНрдерд╛рди рдХреЛ рд╕реНрдЯреЛрд░ рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИредroute
рдХреБрдВрдЬреА рдмрджрд▓ рдЬрд╛рддреА рд╣реИред рдпрд╣ createHref
рдФрд░ pushState
рдХреЛ рднреА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЪрд░рдг 2 рдореЗрдВ рдмрдирд╛рдП рдЧрдП рдорд╛рдирдХ рдЗрддрд┐рд╣рд╛рд╕ рджреЛрдиреЛрдВ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИредрдмрд╕, рдЗрддрдирд╛ рд╣реАред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд░реЗрдбрдХреНрд╕ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд░рд╛рдЙрдЯрд░ рдХреЗ рдмреАрдЪ рдХрд░реНрддрд╡реНрдпреЛрдВ рдХрд╛ рдХрд╛рдлреА рд╕рд╛рдл рдЕрд▓рдЧрд╛рд╡ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдФрд░ "рдЧреЛрдВрдж" рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдЦреАрдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИред рдореИрдВ рдиреАрдЪреЗ рдЕрдкрдирд╛ рдХреЛрдб рдЪрд┐рдкрдХрд╛ рд░рд╣рд╛ рд╣реВрдВ, рдореБрдЭреЗ рдХреЛрдИ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕реБрдирдиреЗ рдореЗрдВ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реЛрдЧреА:
// please pay attention to library versions, this strategy is only tested with the indicated versions
import React from 'react'; // v0.13.3
import { Provider } from 'react-redux'; // v3.1.0
import { Router, Route, IndexRoute, Link } from 'react-router'; // v1.0.0-rc3
import { createHistory } from 'history'; // v1.12.3
import { createStore } from 'redux'; // v3.0.2
// define some components
class About extends React.Component {
render () {
return (
<div><h1>About</h1></div>
)
}
}
class Home extends React.Component {
render () {
return (
<div>
<h1>Home</h1>
<Link to="/about">Go to about</Link>
</div>
)
}
}
// create a standard history object
var history = createHistory();
// set up 'route' action and action creator
const ROUTE = 'ROUTE';
function createRouteAction (location) {
return {
type: ROUTE,
payload: location
};
}
// set up reducer. here we only define behavior for the route action
function reducer (state = {}, action) {
if (action.type === ROUTE) {
return Object.assign({}, state, {
route: action.payload
});
}
else {
return state;
// whatever other logic you need
}
}
// create store
const store = createStore(reducer);
// this factory returns a history implementation which reads the current state
// from the redux store and delegates push state to a different history.
function createStoreHistory () {
return {
listen: function (callback) {
// subscribe to the redux store. when `route` changes, notify the listener
const unsubscribe = store.subscribe(function () {
const route = store.getState().route;
callback(route);
});
return unsubscribe;
},
createHref: history.createHref,
pushState: history.pushState
}
}
React.render(
<Provider store={store}>
{() =>
<Router history={createStoreHistory()}>
<Route path="/about" component={About} />
<Route path="/" component={Home} />
</Router>
}
</Provider>,
document.getElementById('root') // or whatever
);
// when the url changes, dispatch a route action. this is placed at the bottom so that the first route triggers the initial render
const unlisten = history.listen(function (location) {
store.dispatch(createRouteAction(location));
});
рдореИрдВ рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдореЗрд░реЗ рдЬреИрд╕реЗ рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдХреА рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рд░реЗрдбрдХреНрд╕ рдХреЗ рд╕рд╛рде рд░рд┐рдПрдХреНрдЯ-рд░рд╛рдЙрдЯрд░ рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдЬреВрдЭ рд░рд╣реЗ рдереЗ рдФрд░ рдЖрдкрдХреЗ рдЗрд╕ рджрд╛рд╡реЗ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдЬ рд░реЗрдбрдХреНрд╕ рдФрд░ рд░рд┐рдПрдХреНрдЯ-рд░рд╛рдЙрдЯрд░ рдХрд╛ рдПрдХ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
@cappslock рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдПрдХ рдЫреЛрдЯреА рд╕реА рдмрд╛рдд рд╣реИред рдЖрдкрдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рдорд╛рд░реНрдЧ рдмрджрд▓рдирд╛ рдХреНрд░рд┐рдпрд╛ рд╣реИ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ "рдХрд╛рд░реНрд░рд╡рд╛рдИ рдПрдХ рдШрдЯрдирд╛ рд╣реИ рдЬреЛ рдЖрджреЗрд╢ рдирд╣реАрдВ рд╣реИ" рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рддреЛрдбрд╝рддрд╛ рд╣реИ рдЬреЛ рдЕрдВрддрддрдГ рдХреБрдЫ рдЦрд░рд╛рдм рдкреНрд░рдерд╛рдУрдВ рдХреЛ рдЬрдиреНрдо рджреЗ рд╕рдХрддрд╛ рд╣реИред рдЖрдЗрдП рд╕реЛрдЪ рдХреЛ рдЙрд▓реНрдЯрд╛ рдХрд░реЗрдВ, рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдХрд┐рд╕реА рднреА рдХреНрд░рд┐рдпрд╛ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдПрдбреНрд░реЗрд╕рдмрд╛рд░ рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ (рдпрд╛ рддреЛ рд╡рд╣ рдПрдХ рдШрдЯрдХ рдпрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╛ рдПрдбреНрд░реЗрд╕рдмрд╛рд░ ....) рдФрд░ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдирдИ рдХрд╛рд░реНрд░рд╡рд╛рдИ ( ROUTE_CHANGED
) рднреЗрдЬреА рдЬрд╛рддреА рд╣реИред рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рдПрдкреАрдЖрдИ рдХреЙрд▓ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдиреЗ рдЬреИрд╕рд╛ рд╣реА рдкреИрдЯрд░реНрди рд╣реИред
@ tomkis1 рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдЕрдЧрд░ рдореИрдВ рдЖрдкрдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ, рддреЛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред ROUTE
рдХрд╛рд░реНрд░рд╡рд╛рдИ рдпреВрдЖрд░рдПрд▓ рдмрджрд▓рдиреЗ рдХреЗ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рднреЗрдЬреА рдЬрд╛рддреА рд╣реИред рд╢рд╛рдпрдж ROUTE_CHANGED
рдПрдХ рдмреЗрд╣рддрд░ рдирд╛рдо рд╣реЛрдЧрд╛?
рдУрд╣! рдореИрдВрдиреЗ рдЕрднреА рджреЛ рдмрд╛рд░ рдЬрд╛рдБрдЪ рдХреА рд╣реИ рдФрд░ рдЖрдк рд╕рд╣реА рдереЗред рд╣рд╛рдБ ROUTE_CHANGED
рдмреЗрд╣рддрд░ рд╕рдордЭ рдореЗрдВ рдЖрдПрдЧрд╛ред
рдореБрдЭреЗ рднреА рдРрд╕рд╛ рд╣реА рд▓рдЧрддрд╛ рд╣реИред рдореИрдВ рд╡рд╛рдкрд╕ рдЬрд╛рдКрдВрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдмрджрд▓ рджреВрдВрдЧрд╛ рд▓реЗрдХрд┐рди рдлрд┐рд░ рдпреЗ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рднреНрд░рдорд┐рдд рд╣реЛрдВрдЧреА :)
рдкреНрд░рд╡рд╛рд╣ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ, рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:
URL рдкрд░рд┐рд╡рд░реНрддрди -> ROUTE
(рдпрд╛ ROUTE_CHANGED
) рдХреНрд░рд┐рдпрд╛ -> рд░реЗрдбреНрдпреВрд╕рд░ рдЕрдкрдбреЗрдЯ рд╕реНрдЯреЛрд░ -> рд╕реНрдЯреЛрд░ рдЗрддрд┐рд╣рд╛рд╕ (рдкрд╣рд▓реЗ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм рдХрд┐рдпрд╛ рдЧрдпрд╛) рд╢реНрд░реЛрддрд╛рдУрдВ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ -> рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд░рд╛рдЙрдЯрд░ рдЕрдкрдбреЗрдЯ
рдореИрдВ рдЗрд╕реЗ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдпреВрдЖрдИ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рджреЗрдЦреЗ рдЧрдП рд░рд╛рдЬреНрдп рдХреЛ рдЪрд▓рд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕реНрдЯреЛрд░ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рднреА рдмреЗрд╣рддрд░ рд▓рдЧрддрд╛ рд╣реИред
рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рдПрдХ рдХрдореА рдпрд╣ рд╣реИ рдХрд┐ ROUTE_CHANGED
рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рдЬрд╡рд╛рдм рдореЗрдВ URL рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдореБрдЭреЗ рдпрд╣ рднреА рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рдВрдЫрдиреАрдп рд╣реИ рдЕрдЧрд░ рд╣рдо рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рдХрд┐ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрдорд╛рдВрдб рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рдП, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдпрд╛ рддреЛ ROUTE_CHANGED
рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рдХреЗ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╛ рдЗрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдПрдХ рдЕрд▓рдЧ рд╕реНрдЯреЛрд░ рдЧреНрд░рд╛рд╣рдХред
рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ, рдпрджрд┐ рдпрд╣ рдЪрд░реНрдЪрд╛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдФрд░ рдореИрдВ рдЗрд╕реЗ рдЖрдЧреЗ рдмрдврд╝рд╛рдКрдВрдЧрд╛ред
@cappslock рдореБрдЭреЗ рд╡рд╣ рдмрд╣реБрдд рдкрд╕рдВрдж рд╣реИ! рдореБрдЭреЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдХрд┐ ROUTE_CHANGED
рднреЗрдЬрдиреЗ рд╕реЗ рдорд╛рд░реНрдЧ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИред рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рдПрдХ рдШрдЯрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирдирд╛ тАЛтАЛрдФрд░ рдЯреНрд░рд┐рдЧрд░ рдирд╣реАрдВ рдореЗрд░реЗ рд▓рд┐рдП рдХреНрд▓реАрдирд░/рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХрд╛ рдЬрд╡рд╛рдм рджреЗ рд░рд╣рд╛ рд╣реИ; рдЖрдк BUTTON_CLICKED
рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдмрдЯрди рдкрд░ рдПрдХ рдХреНрд▓рд┐рдХ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ)ред рдЖрдкрдХреЗ рдХреЛрдб рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдЬреЛ рдореБрдЭреЗ рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдореЗрд░реЗ рд▓рд┐рдП рдЗрд╕ рдмрд┐рдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ?
рдЗрд╕реЗ рд╕рдмрд╕реЗ рдиреАрдЪреЗ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ рддрд╛рдХрд┐ рдкрд╣рд▓рд╛ рдорд╛рд░реНрдЧ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд░реЗрдВрдбрд░ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░реЗ
@elliotdickison рдзрдиреНрдпрд╡рд╛рдж! рдореИрдВ рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдХреГрдкрдпрд╛ рдирдордХ рдХреЗ рдПрдХ рджрд╛рдиреЗ рдХреЗ рд╕рд╛рде рдореИрдВ рдЬреЛ рдХрд╣рддрд╛ рд╣реВрдВ рдЙрд╕реЗ рд▓реЗрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЧрд╣рди рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдмрдЬрд╛рдп рдкрд░реАрдХреНрд╖рдг рдФрд░ рддреНрд░реБрдЯрд┐ рдФрд░ рдзрд╛рд░рдгрд╛рдУрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рдпрд╣ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдЕрд╡рдзрд╛рд░рдгрд╛/рд╕реНрдХреЗрдЪ рдХрд╛ рдкреНрд░рдорд╛рдг рд╣реИред
рдЬрдм рдореИрдВрдиреЗ рдЙрд╕ рдХреЛрдб рдХреЛ ReactRouter
рдХреА рддрд╛рддреНрдХрд╛рд▓рд┐рдХрддрд╛ рд╕реЗ рдКрдкрд░ рд░рдЦрд╛ рдерд╛, рддреЛ /
рдорд╛рд░реНрдЧ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдШрдЯрдХ рдкреНрд░рд╕реНрддреБрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд░рд╛рдЙрдЯрд░ рдЕрднреА рднреА рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдпрджрд┐ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рднреЗрдЬрд╛ рдЧрдпрд╛ рдерд╛ рдпрд╛ рд░рд╛рдЬреНрдп рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдзрдХреНрдХрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдпрд╣ рдЗрддрд┐рд╣рд╛рд╕ рдХреЗ рд╕рд╛рде рдПрдХ рдЬреАрд╡рдирдЪрдХреНрд░ рдореБрджреНрджрд╛ рдерд╛ред рдЗрд╕реЗ ReactRouter
рдХреА рддрд╛рддреНрдХрд╛рд▓рд┐рдХрддрд╛ рд╕реЗ рдиреАрдЪреЗ рд▓реЗ рдЬрд╛рдиреЗ рд╕реЗ рдпрд╣ рд╣рд▓ рд╣реЛ рдЧрдпрд╛ред рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдЗрддрд┐рд╣рд╛рд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрдо рд╕реЗ рдХрдо рдПрдХ рдЧреНрд░рд╛рд╣рдХ рд╣реЛрдиреЗ рддрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдорд╛рд░реНрдЧ рдХреА рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдХреЛ рд╕реНрдердЧрд┐рдд рдХрд░ рджреЗрддрд╛ рд╣реИред рдпрджрд┐ рдЙрд╕ рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдмрд░ рдХреЛ рд░рд┐рдПрдХреНрдЯ рд░рд╛рдЙрдЯрд░ рдХреЗ рдкрд╣рд▓реЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдХреЛрдИ рднреА рд╕реВрдЪрдирд╛ рдЙрд╕ рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪрддреА рд╣реИред
рдЗрд╕реЗ рд╕рдордЭрд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реБрдП рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдореЗрд░реА рд╕рдордЭ рдореЗрдВ рдереЛрдбрд╝реА рдХрдореА рд╣реИ; рдореИрдВ рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рджреЗрдЦреВрдВрдЧрд╛ рдФрд░ рдмреЗрд╣рддрд░ рдЙрддреНрддрд░ рджреЗрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛ред
рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рдПрдХ рдХрдореА рдпрд╣ рд╣реИ рдХрд┐ URL ROUTE_CHANGED рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рдЬрд╡рд╛рдм рдореЗрдВ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рдВрдЫрдиреАрдп рд╣реИ рдЕрдЧрд░ рд╣рдо рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рдХрд┐ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрдорд╛рдВрдб рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рдП, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдпрд╛ рддреЛ ROUTE_CHANGED рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рдХреЗ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╛ рдПрдХ рдЕрд▓рдЧ рд╕реНрдЯреЛрд░ рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдмрд░ рджреНрд╡рд╛рд░рд╛ рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ, ROUTE_CHANGED
рдХреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдмрд╛рд╣рд░реА рд╕реНрд░реЛрдд рджреНрд╡рд╛рд░рд╛ рд╕рдХреНрд░рд┐рдп рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдСрдирд╣реИрд╢рдЪреЗрдВрдЬ...) IMO URL рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдкрд░рд┐рдгрд╛рдо ROUTE_CHANGED
рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рди рдХрд┐ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрддред
рдореИрдВ рдПрдХ рддрд░рд╣ рд╕реЗ рд╕рд╣рдордд рд╣реВрдВред рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рд╕реНрдЯреЛрд░ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдиреЗ рдФрд░ рдпреВрдЖрд░рдПрд▓ рдХреЛ рд╕рд┐рдВрдХ рдореЗрдВ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЕрдЧрд░ рдХреЛрдб рд╕реЗ рдЙрддреНрдкрдиреНрди ROUTE_CHANGED
рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЗрддрд┐рд╣рд╛рд╕ рдШрдЯрдирд╛ рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реБрдИ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рддрд░реНрдХ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡рд╣ рдорд╛рдорд▓рд╛ рдПрдХ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рддреНрд░реБрдЯрд┐ред
@capslock рдЖрдкрдХрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдмреНрд▓реЙрдЧрдкреЛрд╕реНрдЯ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ?
@vojtatranta рдмрд╕ рджреЗрдЦреЗрдВ https://github.com/rackt/redux/issues/805 рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдкреАрдЫреЗ рдкреНрд░реЗрд░рдгрд╛ рдереАред
@vojtatranta рдзрдиреНрдпрд╡рд╛рдж! рдореЗрд░реЗ рдкрд╛рд╕ рдХреЛрдИ рдмреНрд▓реЙрдЧ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореЗрд░реЗ рдкрд╛рд╕ рдЬреЛ рднреА рдЬрд╛рдирдХрд╛рд░реА рд╣реИ рд╡рд╣ рдЗрд╕ рдереНрд░реЗрдб рдФрд░ #805 рдореЗрдВ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХреБрдЫ рднреА рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдк рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдЪрд╛рд╣рддреЗ рдереЗ?
1.0 рдЦрддреНрдо рд╣реЛ рдЧрдпрд╛ рд╣реИред
рдпрд╣ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ:
real-world
рдЙрджрд╛рд╣рд░рдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░ "рд░реВрдЯрд░ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ" рдиреБрд╕реНрдЦрд╛ рдЬреЛрдбрд╝реЗрдВ:рддрд╛рд▓реА:
@gaearon рдХреНрдпрд╛ рдЖрдк рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рд░рд╛рдЙрдЯрд░_ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде _Usage рдкреАрдЖрд░ рдореЗрдВ рд╣реИ? рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВ рдЬрд╛рдирддрд╛ рд╣реВрдВ (рд╕реНрд╡рдпрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ) рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рд╣реИрдВ рдХрд┐ рдпреЗ рджреЛрдиреЛрдВ рдПрдХ рд╕рд╛рде рдХреИрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЦреЗрд▓рддреЗ рд╣реИрдВред
рд╣рд╛рдБ рдпрдХреАрдирдиред рдпрд╣ рддрдм рд╣реЛрдЧрд╛ рдЬрдм рдореБрджреНрджрд╛ рдмрдВрдж рд╣реЛ рдЬрд╛рдПрдЧрд╛ред :-)
рд╢рд╛рдпрдж рдЕрдм рд░реЗрдбрдХреНрд╕-рд╕рд░рд▓-рд░рд╛рдЙрдЯрд░ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП?
рд░реЗрдбрдХреНрд╕-рд╕рд░рд▓-рд░рд╛рдЙрдЯрд░ +1
рдореИрдВрдиреЗ рдЕрднреА рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдЙрджрд╛рд╣рд░рдг + рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд░рд╛рдЙрдЯрд░ (+ redux-рд╕рд░рд▓-рд░рд╛рдЙрдЯрд░) рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рд╣реИ
https://github.com/eriknyk/redux-universal-app
рд╣рд╛рдп рд╕рдм, рдЗрд╕ рдЪрд░реНрдЪрд╛ рдХрд╛ рдирд┐рд╖реНрдХрд░реНрд╖ рдХреНрдпрд╛ рд╣реИ? рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдБ рдбреЙрдХреНрд╕ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд░рд╛рдЙрдЯрд░ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЕрджреНрдпрддрди рдирд╣реАрдВ рд╣реИрдВ
cc @gaearon
@gaearon рдХреЗ рдмрд╛рдж рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЖрд╡реЗрджрди рдХреЛ redux рдкрд░ рдмрд╛рдзреНрдп рдХрд┐рдпрд╛, рдореИрдВ рдЕрдкрдиреЗ рдШрдЯрдХреЛрдВ рдХреЗ рдкреНрд░рджрд░реНрд╢рди/рдЫреБрдкрд╛ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╕ рд░рд╛рдЬреНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЖрд░рдЖрд░ рдЬреИрд╕реА рдореВрд▓ "рд░рд╛рдЙрдЯрд░" рднреВрдорд┐рдХрд╛ рдЕрдм рдореЗрд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ рдлрд┐рдЯ рдмреИрдарддреА рд╣реИред
рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ "рдирдП рд░рд╛рдЙрдЯрд░" рдХреЛ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рд╡рд╣ рд╣реИ рдпреВрдЖрд░рдПрд▓ рдХреЛ рд░рд╛рдЬреНрдп рдореЗрдВ рдореИрдк рдХрд░рдирд╛ (рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ?)
рдЕрдЧрд░ рд╣рдо рдпреВрдЖрд░рдПрд▓ рдХреЛ рдпрд╣ рддрдп рдХрд░рдиреЗ рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдШрдЯрдХ (рд╢рд╛рдпрдж рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ) рдХреИрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд░рд╛рдЬреНрдп рдХреЗ рджреЛ рд╕реНрд░реЛрдд рд╣реИрдВ, рдПрдХ рдпреВрдЖрд░рдПрд▓ рд╣реИ, рджреВрд╕рд░рд╛ рд░реЗрдбрдХреНрд╕ рдХрд╛ рд╕реНрдЯреЛрд░ рд╣реИ, рдЬреЛ рдЪреАрдЬреЛрдВ рдХреЛ рдХрдард┐рди рдмрдирд╛ рджреЗрдЧрд╛ ...
рдЖрдк рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдХрд╣рддреЗ рд╣реИрдВ? рдХреНрдпрд╛ рд╣рдореЗрдВ рдкрддрд╛ рдмрд╛рд░ рдХреЛ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЗ рдЕрдиреНрдп рдШрдЯрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд░рд╣рдиреЗ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдзрдиреНрдпрд╡рд╛рдж
рд╣рдо рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рддреМрд░ рдкрд░ https://github.com/rackt/react-router-redux/pull/259 рд╢рд┐рдк рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрджреНрдз рд╣реИрдВред рдпрд╣ рд░рд┐рдПрдХреНрдЯ рд░рд╛рдЙрдЯрд░ рдФрд░ рд░реЗрдбрдХреНрд╕ рдХреЛ рдмрд╛рдЗрдВрдб рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реЛрдЧрд╛ред рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ, рд╣рдо рдкрд╣рд▓реЗ рджрд┐рдЦрд╛рдПрдВрдЧреЗ рдХрд┐ рдЙрд╕ рдкреИрдХреЗрдЬ рдХреЗ рдмрд┐рдирд╛ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ, рдФрд░ рдзреАрд░реЗ-рдзреАрд░реЗ рджреЛ рдЙрдкрдпреБрдХреНрддрддрд╛рдПрдВ рдкреЗрд╢ рдХрд░реЗрдВ рдЬреЛ рдкреИрдХреЗрдЬ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ: рдорд┐рдбрд▓рд╡реЗрдпрд░ рдФрд░ рд╕реНрдЯреЛрд░ рдореЗрдВ рд╕рддреНрдп рдХреЗ рд░реВрдЯрд┐рдВрдЧ рд╕реНрд░реЛрдд рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ред рджреЛрдиреЛрдВ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИрдВ рдЗрд╕рд▓рд┐рдП рд╣рдо рдпрд╣ рдмрддрд╛рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдЖрдк рдХрд┐рд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рд╡реЗ рдЖрдкрдХреЛ рд╡реИрдирд┐рд▓рд╛ рдЖрд░рдЖрд░ рдкрд░ рдХреНрдпрд╛ рджреЗрддреЗ рд╣реИрдВред
рдпрд╣рд╛рдВ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдЪрд╛рд░ рд╣реИ: рдпрджрд┐ рдЖрдк рд░реВрдЯрд┐рдВрдЧ рдФрд░ рдЗрддрд┐рд╣рд╛рд╕ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рд╕рдордЭрд╛рддреЗ рд╣реИрдВ, рддреЛ рд╡рд╣ http://rackt.org/redux/docs/advanced/Middleware.html рдХреА рд╕рд╛рдорд╛рдиреНрдп рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреЗ рднреАрддрд░ рдпрдерд╛рд░реНрдерд╡рд╛рджреА рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХрд╛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣рд┐рд╕реНрд╕рд╛ рдмрди рд╕рдХрддрд╛ рд╣реИ ( рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдВрдд рдореЗрдВ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ)
@gaearon рд░рд┐рдПрдХреНрдЯ рд░рд╛рдЙрдЯрд░ рдбреЙрдХреНрдЯрд░/рдЕрдЧрд▓реЗ рдЪрд░рдгреЛрдВ рдкрд░ рдХреЛрдИ рдкреНрд░рдЧрддрд┐? рдореИрдВ Redux рдкреНрд░рд▓реЗрдЦрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрдврд╝ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЗрд╕реЗ рдкреНрдпрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЙрди рдирдХрд▓реА рд▓рд┐рдВрдХ рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛ рдЧрдпрд╛ :(
рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реЗрдкреЛ рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд░рд╛рдЙрдЯрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рд╣реИ рдФрд░ рдореИрдВ рд╡рд╣рд╛рдВ рднреА рд░реЗрдбрдХреНрд╕ рдЕрдиреБрднрд╛рдЧ рд░рдЦрдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВ рдЬрд▓реНрдж рд╣реА рдХреБрдЫ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдпрд╣ рдореЗрд░реЗ рдЦрд╛рд▓реА рд╕рдордп рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдЖрдкрдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реВрдВрдЧрд╛ред https://github.com/knowbody/react-router-docs
рдирд┐рд╖реНрдкрдХреНрд╖ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рд░рд┐рдПрдХреНрдЯ рд░рд╛рдЙрдЯрд░ рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Redux рдХреА рддрд░рдл рд╕реЗ рдХрд┐рд╕реА рдЪреАрдЬ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рд╣рд╛рдБ рд╣рдореЗрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИред
рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВ: рд░рд┐рдПрдХреНрдЯ рд░рд╛рдЙрдЯрд░ 3.0 рд░рд┐рдПрдХреНрдЯ рд░реЗрдбрдХреНрд╕ connect()
рдЕрдиреБрдХреВрд▓рди рдХреЗ рд╕рд╛рде рдмреЗрд╣рддрд░ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдФрд░ рдирдП withRouter()
рдПрдЪрдУрд╕реА рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рд╕реАрдзреЗ рд╕рдВрджрд░реНрдн рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
@gaearon , @timdorr рдХреНрдпрд╛ рдЖрдк рд░рд╛рдЙрдЯрд░ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЛ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рдХреЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░рдиреЗ рдФрд░ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рдореЗрдВ рд╕реАрдзреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░рд╣рд┐рд╕реНрдЯреНрд░реА рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рдмреАрдЪ рдЯреНрд░реЗрдб-рдСрдл рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣рд╛рдВ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ https://github.com/reactjs/react-router/blob /рдорд╛рд╕реНрдЯрд░/рдбреЙрдХреНрд╕/рдЧрд╛рдЗрдбреНрд╕/рдиреЗрд╡рд┐рдЧреЗрдЯрд┐рдВрдЧрдСрдЙрдЯрд╕рд╛рдЗрдбрдСрдлрдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕.рдПрдордбреА?
router
рдмрд╕ рдЖрдкрдХреЗ рдЗрддрд┐рд╣рд╛рд╕ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рдЙрдкрд╣рд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рд▓рдкреЗрдЯрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рджреЛ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдмреАрдЪ рд╕рдорд╛рди push
рдФрд░ replace
рддрд░реАрдХреЗ рд╣реИрдВред
рдзрдиреНрдпрд╡рд╛рдж, @timdorrред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рд╡рд╛рд▓ рддрдм рдмрди рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ withRouter()
рд╕рдВрд░рдЪрдирд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ рдпрджрд┐ router
рдореВрд▓ рд░реВрдк рд╕реЗ рдЗрддрд┐рд╣рд╛рд╕ рд╕рд┐рдВрдЧрд▓рдЯрди рдХреЛ рд▓рдкреЗрдЯрддрд╛ рд╣реИ (рдпрд╣ рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рд╣реИ, рд╣реИ рдирд╛)?
рдХреНрдпрд╛ рдпрд╣ рдХрд┐рд╕реА рдШрдЯрдХ рдФрд░ рдЗрддрд┐рд╣рд╛рд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдмреАрдЪ рдвреАрд▓реЗ рдпреБрдЧреНрдорди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рд╣реИ (рдпрд╛рдиреА рдШрдЯрдХ рдХреЛ рд╕реАрдзреЗ рд╕рд┐рдВрдЧрд▓рдЯрди рдСрдмреНрдЬреЗрдХреНрдЯ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП)? рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рдХреНрдпрд╛ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рд╕реЗ рд╣рд┐рд╕реНрдЯреНрд░реА рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рддреЗ рд╕рдордп рд╡рд╣реА рд▓реЙрдЬрд┐рдХ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрдЧрд╛?
рд╣рд╛рдВ, рдФрд░ рдпрджрд┐ рдЖрдк рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдЗрддрд┐рд╣рд╛рд╕ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдирд╛ рд╕рд┐рдВрдЧрд▓рдЯрди рдореЙрдбреНрдпреВрд▓ рдирд╣реАрдВ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ (рдпрд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ) (рдЬреЛ рднреНрд░рдорд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдЖрдк рдЬреЗрдПрд╕ рдореЙрдбреНрдпреВрд▓ рд╕рд┐рд╕реНрдЯрдо рд╕реЗ рд╕реБрдкрд░-рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ)ред рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдорд╛рд░реЗ рдкреИрдЯрд░реНрди рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред
рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ withRouter
рдХрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬреАрдХрд░рдг рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реЛрдЧрд╛ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдИ рдЙрдЪреНрдЪ рдСрд░реНрдбрд░ рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рдЕрднреА рднреА рдЗрд╕рд╕реЗ рдмрдЪрдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдЬрд╛рдирдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ:
connect(mapStateToProps, mapDispatchToProps)(withRouter(withAnalytics(withLanguage(TestForm))));
ред
рдореИрдВ compose
рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рдерд╛?
const enhance = compose(
connect(mapStateToProps, mapDispatchToProps),
withRouter,
withAnalytics,
withLanguage
);
export default enhance(TestForm);
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореЗрд░реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдВрджрд░реНрдн рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛, рд╡рд░реНрддрдорд╛рди рднрд╛рд╖рд╛, рд╡рд┐рд╖рдп рдХреА рдЬрд╛рдирдХрд╛рд░реА рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рд┐рдХреА рдореЗрдВ рд▓реЙрдЧ рдЗрди рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ, рдЬреЛ рдЗрд╕реЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕рдВрджрд░реНрдн рдФрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЬреБрдбрд╝реЗ рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рдЪреБрдиреМрддреАрдкреВрд░реНрдг рдмрдирд╛рддрд╛ рд╣реИред
рдПрдХ рдЕрдиреНрдп рд╡рд┐рдЪрд╛рд░ withRouter
рдФрд░ connect
рддрд░реНрдХ рдХреЛ рдПрдХ рд╕рдВрджрд░реНрдн рдирд╛рдорд╕реНрдерд╛рди рдХреЗ рддрд╣рдд рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд░рдирд╛ рд╣реИ: withAppContext() => props.app = { user, lang, theme, analytics, router, connect? }
?
рдХреНрдпрд╛ рдпрд╣ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдпрд╛ рдЙрджрд╛рд╣рд░рдг withRouter
рдХреЗ рд╕рд╛рде connect
$ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдлрд╛рдпрджреЗрдордВрдж рд╣реЛрдЧрд╛?
@gaearon рдХреНрдпрд╛ рдЕрдм рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрдкрдбреЗрдЯ рд╣реИ рдХрд┐ рд░рд┐рдПрдХреНрдЯ рд░рд╛рдЙрдЯрд░ 3.0.0 рдФрд░ рдЖрдкрдХреЗ рдирдП рдПрдЧрд╣реЗрдб рд╡реАрдбрд┐рдпреЛ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдмрд╛рд╣рд░ рд╣реЛ рдЧрдП рд╣реИрдВ, рдФрд░ рдпрд╣ рдзрд╛рдЧрд╛ рдПрдХ рд╕рд╛рд▓ рдХреЗ рд▓рд┐рдП рдЦреЛрд▓рд╛ рдЧрдпрд╛ рд╣реИ?
#1929 . рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рд╕рд╛рде рд╣реА, рдЖрдк рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕рд╛ рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд░рд╛рдЙрдЯрд░ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ?