Redux: рдбреЙрдХреНрд╕: рд░рд┐рдПрдХреНрдЯ рд░рд╛рдЙрдЯрд░ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ

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

рд▓реЛрдЧреЛрдВ рдХреЛ рд▓рдЧрд╛рддрд╛рд░ рдпрд╣ рдЖрднрд╛рд╕ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рд░рд┐рдПрдХреНрдЯ рд░рд╛рдЙрдЯрд░ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╛ рдХрд┐ рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░реЗрдбрдХреНрд╕-рд░рд┐рдПрдХреНрд╢рди-рд░рд╛рдЙрдЯрд░ рдЬреИрд╕реЗ рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдпрд╣ рд░рд┐рдПрдХреНрдЯ 0.14 рддрдХ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдЖрдк рд░рд┐рдПрдХреНрдЯ рд░рд╛рдЙрдЯрд░ 0.13 рдпрд╛ 1.0 рдХреЗ рд╕рд╛рде Redux рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдЬ рдХреА рддрд░рд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
(рдФрд░ рдпрд╣ Redux рдХреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рдмрд╛рдж рд╕реЗ рд╕рдЪ рдерд╛ред)

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

рдЗрд╕ рд░реЗрдкреЛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рд░рд┐рдПрдХреНрдЯ рд░рд╛рдЙрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЖрдкрдХреЛ рдмрд╕ <Router> рдХреЛ <Provider> рдореЗрдВ рд▓рдкреЗрдЯрдирд╛ рд╣реИ, рдареАрдХ рдЙрд╕реА рддрд░рд╣ рдЬреИрд╕реЗ рдЖрдк рдЕрдкрдиреЗ рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп рдШрдЯрдХ рдХреЛ рд░рд╛рдЙрдЯрд░-рд░рд╣рд┐рдд рдРрдк рдореЗрдВ рд▓рдкреЗрдЯрддреЗ рд╣реИрдВред

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

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

рд╣рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ..

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

рд╕рд╛рде рд╣реА, рдЖрдк рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕рд╛ рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд░рд╛рдЙрдЯрд░ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ?

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

рдореИрдВрдиреЗ рдореВрд▓ рд░реВрдк рд╕реЗ рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╕рдВрджрд░реНрдн рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд░рд╛рдЙрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рд░реЗрдВрдбрд░рд┐рдВрдЧ рдЙрджрд╛рд╣рд░рдг рд▓рд┐рдЦрд╛ рдерд╛ред рдпрд╣ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд░рд╛рдЙрдЯрд░ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рд╕реНрд╡рдпрдВ рдХрд╛ рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдмрди рд╕рдХрддрд╛ рд╣реИред рд╢рд╛рдпрдж рд╣рдо рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рдПрдХ рдЕрдиреБрднрд╛рдЧ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ?

рд╕рд╛рде рд╣реА, рдЖрдк рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕рд╛ рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд░рд╛рдЙрдЯрд░ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП 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)ред рдЙрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рдХреБрдЫ рдЪрд░реНрдЪрд╛ рдФрд░ рдХреБрдЫ рдкреНрд░рдпреЛрдЧ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдореБрдЭреЗ рдПрдХ рдРрд╕рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдорд┐рд▓рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд░рд╛рдЙрдЯрд░/рд░рд┐рдПрдХреНрд╢рди-рд░реЗрдбрдХреНрд╕-рд░рд╛рдЙрдЯрд░ рдЧреЛрдВрдж рдХреЛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВред

рдореВрд▓ рд░реВрдк рд╕реЗ, рдореИрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд░рд╛рдЙрдЯрд░ рдпрд╛ рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рдХрд┐рд╕реА рднреА рдЬреНрдЮрд╛рди рдХреЛ рдлрд┐рд░ рд╕реЗ рдирд╣реАрдВ рджреЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЙрдиреНрд╣реЗрдВ рдПрдХ рдХрд╕реНрдЯрдо рдЗрддрд┐рд╣рд╛рд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рд░реВрдЯрд┐рдВрдЧ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ:

  1. route рдХреЗ рд▓рд┐рдП рд╕реНрдЯреЛрд░ рдореЗрдВ рдПрдХ рдХреНрд░рд┐рдпрд╛, рдПрдХ рд░реЗрдбреНрдпреВрд╕рд░ рдФрд░ рдПрдХ рдХреБрдВрдЬреА рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИред
  2. рдПрдХ рдорд╛рдирдХ рдЗрддрд┐рд╣рд╛рд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди (рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдкрд╕рдВрджреАрджрд╛ createHistory рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ createHashHistory рдпрд╛ рдЬреЛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ) рдмрдирд╛рдпрд╛ рдФрд░ рд╕реБрдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрдм рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд╛рди рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдПрдХ рд░реВрдЯ рдХрд╛рд░реНрд░рд╡рд╛рдИ рднреЗрдЬреА рдЬрд╛рддреА рд╣реИ, рдЕрдВрддрддрдГ рд╕реНрдерд╛рди рдХреЛ рд╕реНрдЯреЛрд░ рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  3. рдПрдХ рдорд╛рдирдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд░рд╛рдЙрдЯрд░ рдЙрджрд╛рд╣рд░рдг рдПрдХ рджреВрд╕рд░реЗ рдХрд╕реНрдЯрдо рдЗрддрд┐рд╣рд╛рд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЧреНрд░рд╛рд╣рдХ (рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд░рд╛рдЙрдЯрд░) рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрдм рд╕реНрдЯреЛрд░ рдХреА 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() рдПрдЪрдУрд╕реА рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рд╕реАрдзреЗ рд╕рдВрджрд░реНрдн рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

https://twitter.com/dan_abramov/status/729768048417251328

@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 . рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛

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

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

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

rui-ktei picture rui-ktei  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

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

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

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