Redux: рдХрдВрдЯреЗрдирд░ рдмрдирд╛рдо рдШрдЯрдХ?

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

рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рд╣рдореЗрд╢рд╛ "рдХрдВрдЯреЗрдирд░" рдирд╛рдордХ рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдХреЛ "рдШрдЯрдХ" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдЕрд▓рдЧрд╛рд╡ рдХреЗ рдкреАрдЫреЗ рдХреНрдпрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ?

рдХреНрдпрд╛ "рдХрдВрдЯреЗрдирд░" рд╕реНрдорд╛рд░реНрдЯ рдШрдЯрдХ рд╣реИрдВ рдпрд╛ рд╡реЗ рд░реВрдЯ рдШрдЯрдХ рд╣реИрдВ рдпрд╛ рдХреБрдЫ рдФрд░? рдХреНрдпрд╛ "рдШрдЯрдХреЛрдВ" рдХреЗ рддрд╣рдд рдШрдЯрдХ рд╣рдореЗрд╢рд╛ рдЧреВрдВрдЧрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП?

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

рдореИрдВ components рдЗрдирдХреИрдкреНрд╕реБрд▓реЗрдЯреЗрдб рд░рд┐рдПрдХреНрдЯ рдШрдЯрдХреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░реЙрдкреНрд╕ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдЪрд╛рд▓рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ Redux рд╕реЗ рдмрд╛рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред "рдЧреВрдВрдЧрд╛ рдШрдЯрдХреЛрдВ" рдХреЗ рд╕рдорд╛рдиред рдЖрдкрдХреЗ рд░рд╛рдЙрдЯрд░, рдбреЗрдЯрд╛ рд▓рд╛рдиреЗ рд╡рд╛рд▓реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЖрджрд┐ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ рдЙрдиреНрд╣реЗрдВ рд╡рд╣реА рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореИрдВ containers рд░рд┐рдПрдХреНрдЯ рдШрдЯрдХреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ Redux, рд░рд╛рдЙрдЯрд░ рдЖрджрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддреЗ рд╣реИрдВред рд╡реЗ рдРрдк рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХ рдпреБрдЧреНрдорд┐рдд рд╣реИрдВред "рд╕реНрдорд╛рд░реНрдЯ рдШрдЯрдХреЛрдВ" рдХреЗ рд╕рдорд╛рдиред

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

рдореЗрд░реЗ рд▓рд┐рдП, container рдорд╛рд░реНрдЧ рдХрд╛ рд╣реИрдВрдбрд▓рд░ рд╣реИ, рдЬреЛ рдЙрд╕ рдорд╛рд░реНрдЧ рдХреЗ рд▓рд┐рдП рд░реЗрдбрдХреНрд╕ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рднреА рдЦреАрдВрдЪрддрд╛ рд╣реИред рдлрд┐рд░ рдореИрдВ рдЕрдкрдиреЗ рд░рд╛рдЬреНрдп рдХреЛ рд╕рд╣рд╛рд░рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,

рдХрдВрдЯреЗрдирд░/рдЧреБрдг.jsx

import React, { Component } from 'react';
import { bindActionCreators } from 'redux';
import { connect }  from 'react-redux';

import * as actions from 'actions/properties';
import Filter from 'components/properties/filter';
import List from 'components/properties/list';
import Pagination from 'components/properties/pagination';

class PropertiesContainer extends Component {
  render() {
    return (
      <section>
        <Filter filter={this.props.properties.params.filter} />
        <List items={this.props.properties.items} isFetching={this.props.properties.isFetching} />
        <Pagination pagination={this.props.properties.params.pagination} />
      </section>
    );
  }
}

function mapState(state) {
  const { properties } = state;

  return { properties };
}

function mapDispatch(dispatch) {
  return {
    actions: bindActionCreators(actions, dispatch),
  };
}

const Connector = connect(mapState, mapDispatch)(PropertiesContainer);

export default Connector;

рдФрд░, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,

рдШрдЯрдХ/рдЧреБрдг/рдкреЗрдЬрд┐рдиреЗрд╢рди.jsx

import React, { Component } from 'react';
import Pager from 'components/ui/pager';

class Pagination extends Component {
  render() {
    const { total, offset, limit } = this.props.pagination;
    const current = offset / limit;

    return (
      <Pager total={total} current={current} />
    )
  }
}

export default Pagination;

рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рд▓рд┐рдВрдХ рд╕реЗ рдкрдврд╝рдирд╛:

"A container does data fetching and then renders its corresponding sub-component. "

рдореБрдЭреЗ рдФрд░ рдЕрдзрд┐рдХ рдорд╣рд╕реВрд╕ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ "рдХрдВрдЯреЗрдирд░" рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд░реЗрдбрдХреНрд╕ рдореЗрдВ "рд╕реНрдорд╛рд░реНрдЯ рдШрдЯрдХ" рдХрд╣рд▓рд╛рддреЗ рд╣реИрдВ ... рдФрд░ рдорд╛рд░реНрдЧреЛрдВ/рдкреГрд╖реНрдареЛрдВ рдХреЛ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдлрд╝реЛрд▓реНрдбрд░ рдорд┐рд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ "рдХрдВрдЯреЗрдирд░" рдФрд░ "рд░реВрдЯ рд╣реИрдВрдбрд▓рд░" рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреНрдпреЛрдВ рд╣реИрдВ?

рдЕрдкрдиреЗ рдРрдк рдХреЗ рдШрдЯрдХреЛрдВ рдХреЛ рдорд╛рд░реНрдЧ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рдореВрд╣рд┐рдд рдХрд░рдирд╛ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдерд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ @theaqua рдиреЗ рдмрддрд╛рдпрд╛, рдкреНрд░рддреНрдпреЗрдХ рд░реВрдЯ рд╣реИрдВрдбрд▓рд░/рдШрдЯрдХ рдХреЛ рд╕реНрдорд╛рд░реНрдЯ/рдХрдВрдЯреЗрдирд░ рдШрдЯрдХ рдмрдирд╛рдирд╛ рднреА рдЖрдо рд╣реИред рдпрджрд┐ рдЖрдк CombReducers рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЕрдХреНрд╕рд░ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдПрдХ рд╣реА рддрд░реНрдЬ рдкрд░ рд░рд╛рдЬреНрдп, рдорд╛рд░реНрдЧреЛрдВ рдФрд░ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ рддреЛрдбрд╝рддреЗ рд╣реБрдП рдкрд╛рдПрдВрдЧреЗред рдЗрд╕рд▓рд┐рдП, рд╡реЗ рдЕрдХреНрд╕рд░ рдПрдХ рд╕рд╛рде рдЬреБрдбрд╝ рдЬрд╛рддреЗ рд╣реИрдВред

@ronag рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдерд╛ рдХрд┐ рдЖрдкрдХреЛ рдХрдВрдЯреЗрдирд░ рдФрд░ рдкреЗрдЬ рдмрдирд╛рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИред рдЖрдк рд░реВрдЯ рд╣реИрдВрдбрд▓рд░ рдФрд░ рд░реЗрдбрдХреНрд╕ рдХрдиреЗрдХреНрдЯрд░ рдХреЛ рд░рд╛рдЬреНрдп рдореЗрдВ 1 рд╕реНрдерд╛рди рдкрд░ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ? рдпрд╣ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред рдЗрд╕реЗ рд╕рд░рд▓ рд░рдЦреЗрдВред

рдореЗрд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ рдореЗрд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ 3 рдорд╛рд░реНрдЧ/рдкреГрд╖реНрда рд╣реИрдВред рджреВрд╕рд░реА рдУрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдмрд╣реБрдд рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рдкреИрдирд▓/рдореЙрдбреНрдпреВрд▓ рд╣реИрдВред рдПрдХ рд╡рд┐рд╢рд╛рд▓ connect рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ рдореБрдЭреЗ рдХрдо рд╕реЗ рдХрдо рдЗрд╕реЗ рдкреИрдирд▓реЛрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

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

рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ 3 рдорд╛рд░реНрдЧ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ 3 рдорд╛рд░реНрдЧ рд╕рдВрдЪрд╛рд▓рдХреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, A.jsx , B.jsx рдФрд░ C.jsx рдореЗрдВ /containers ред

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЖрдкрдХрд╛ рд╕реБрдЭрд╛рд╡ рд╕рдордЭрддрд╛ рд╣реВрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛ рдХрд┐ рд╡реЗ 3 рдлрд╛рдЗрд▓реЗрдВ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рд╣реЛ рдЬрд╛рдПрдВрдЧреА рдпрджрд┐ рдореИрдВ рдЕрдкрдирд╛ рд╕рд╛рд░рд╛ рдбреЗрдЯрд╛ рд╡рд╣рд╛рдВ рд▓рд╛рдиреЗ рдореЗрдВ рд▓рдЧрд╛ рджреВрдВред рд╣рдорд╛рд░реЗ рдХрд╛рд░рдг рдореЗрдВ рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ "рд▓реЙрдЧрд┐рди, рдРрдк, рд▓реЙрдЧрдЖрдЙрдЯ" рд╣реЛрдЧрд╛ рдЬрд╣рд╛рдВ рдРрдк рдореЗрдВ рд▓рдЧрднрдЧ рд╕рдм рдХреБрдЫ рд╣реЛрдЧрд╛ред

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ Relay рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкрдХреНрд╖рдкрд╛рддреА рд╣реВрдВ рдЬрд╣рд╛рдВ рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдореЗрдВ рдПрдХ рдХрдВрдЯреЗрдирд░ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ рдбреЗрдЯрд╛ рд▓рд╛рдирд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдХреИрд╕реЗ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореИрдВ рдЖрдкрдХреЗ рд╕реБрдЭрд╛рд╡ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛ рдФрд░ рджреЗрдЦреВрдВрдЧрд╛ рдХрд┐ рд╣рдо рдХрд╣рд╛рдВ рд╕рдорд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВред

рдореИрдВ components рдЗрдирдХреИрдкреНрд╕реБрд▓реЗрдЯреЗрдб рд░рд┐рдПрдХреНрдЯ рдШрдЯрдХреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░реЙрдкреНрд╕ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдЪрд╛рд▓рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ Redux рд╕реЗ рдмрд╛рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред "рдЧреВрдВрдЧрд╛ рдШрдЯрдХреЛрдВ" рдХреЗ рд╕рдорд╛рдиред рдЖрдкрдХреЗ рд░рд╛рдЙрдЯрд░, рдбреЗрдЯрд╛ рд▓рд╛рдиреЗ рд╡рд╛рд▓реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЖрджрд┐ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ рдЙрдиреНрд╣реЗрдВ рд╡рд╣реА рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореИрдВ containers рд░рд┐рдПрдХреНрдЯ рдШрдЯрдХреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ Redux, рд░рд╛рдЙрдЯрд░ рдЖрджрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддреЗ рд╣реИрдВред рд╡реЗ рдРрдк рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХ рдпреБрдЧреНрдорд┐рдд рд╣реИрдВред "рд╕реНрдорд╛рд░реНрдЯ рдШрдЯрдХреЛрдВ" рдХреЗ рд╕рдорд╛рдиред

@gaearon : рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╣реАред рдпрд╣ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИред рдзрдиреНрдпрд╡рд╛рджред

@gaearon рддреЛ "рдЧреВрдВрдЧрд╛ рдШрдЯрдХ" рд╕реНрдЯреЗрдЯрд▓реЗрд╕ рдШрдЯрдХ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдПрдХ рд╕рд░рд▓ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

var Aquarium = (props) => {
  var fish = getFish(props.species);
  return <Tank>{fish}</Tank>;
};

рдХреНрдпрд╛ рдореИрдВ рд╕рд╣реА рд╣реВрдБ?

@soulmachine рд╣рд╛рдБред

рдЬрд░реВрд░реА рдирд╣реАред рд╕рд┐рдВрдЯреИрдХреНрд╕ рдмрд┐рдВрджреБ рдирд╣реАрдВ рд╣реИред

"рдЧреВрдВрдЧрд╛" рдШрдЯрдХ рдЙрд░реНрдл тАЛтАЛ"рдкреНрд░реЗрдЬреЗрдВрдЯреЗрд╢рдирд▓" рдШрдЯрдХ рдРрд╕реЗ рдШрдЯрдХ рд╣реИрдВ рдЬреЛ рдкреНрд░реЙрдкреНрд╕ рджреНрд╡рд╛рд░рд╛ рд╕рднреА рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, Redux рд╕реЗ рдЕрд╡рдЧрдд рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдХреЗрд╡рд▓ рдЙрдкрд╕реНрдерд┐рддрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВред

@theaqua @gaearon рдзрдиреНрдпрд╡рд╛рдж!

рдпрджреНрдпрдкрд┐ "рдХрдВрдЯреЗрдирд░" рд╢рдмреНрдж рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛/рд░реЗрдбрдХреНрд╕ рдирд╛рдордХрд░рдг рдореЗрдВ рдХрд╛рдлреА рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реИ, рд╣рдордиреЗ рд▓реЗрдЖрдЙрдЯ/рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рднреА рднреНрд░рдо рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрд┐рд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдореИрдВ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЙрд╕рдореЗрдВ рд╣рдордиреЗ рдЙрдиреНрд╣реЗрдВ "рдХрдиреЗрдХреНрдЯрд░реНрд╕" рдХрд╣рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред

рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ, рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рдХреЙрд▓ рдХрд░реЗрдВ, рдкрд╣рд▓реЗ рдпрд╣рд╛рдВ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рдереА рд░реИрдХреЗрдЯ/рд░рд┐рдПрдХреНрд╢рди-рд░реЗрдбрдХреНрд╕ # 170ред рдореИрдВ рд╕рдм рдХреБрдЫ рдПрдХ components рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рдЕрдВрджрд░ рд░рдЦрддрд╛ рд╣реВрдВ рдФрд░ рдкреНрд░реЗрдЬреЗрдВрдЯреЗрд╢рдирд▓ рдПрдХ рд╕реНрддрд░ рдЧрд╣рд░рд╛, components/presentational рдЕрдВрджрд░, рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдареАрдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХрдВрдЯреЗрдирд░ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдРрдк рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рджреНрд╡рд╛рд░рд╛ рдЙрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИред

@gaearon рддреЛ рдПрдХ рдШрдЯрдХ рд╣реИ рдХрд┐ dispatch рдХреЛ "рдЧреВрдВрдЧрд╛" рдпрд╛ "рд╕реНрдорд╛рд░реНрдЯ" рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ? рдкреНрд░реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдШрдЯрдирд╛ рдХреЛ рд╡рд╛рдкрд╕ рд╢реАрд░реНрд╖ рдШрдЯрдХ рдкрд░ рдмрдмрд▓ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдХрд╛рд░реНрд░рд╡рд╛рдИ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрддреНрддрд╛ рдпрд╛ рдордзреНрдпрд╡рд░реНрддреА рдШрдЯрдХ рд╣реЛрдирд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реЛрддрд╛ рд╣реИред

рд╣рд╛рдБ, рдпрд╣ рдХрднреА-рдХрднреА рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдРрд╕реЗ рдШрдЯрдХреЛрдВ рдХреЛ connect() рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рдХреЛ рдПрдХ рдкреНрд░реЛрдк рдХреЗ рд░реВрдк рдореЗрдВ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд╣рддреЗ рд╣реИрдВ :-)

рдЬрдм рдЖрдк рдШрдЯрдХреЛрдВ рдХрд╛ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдмрдирд╛ рд░рд╣реЗ рд╣реЛрдВ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рди рд▓реАрдЬрд┐рдП рдореЗрд░реЗ рдкрд╛рд╕ рд╣рдорд╛рд░реЗ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдореЗрдиреВ <NavMenu> рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдиреЛрдб рдореЙрдбреНрдпреВрд▓ рд╣реИ, рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд▓реЛрдЧ рдЗрд╕ рддрд░рд╣ рдХреЛрдб рдХрд░реЗрдВ:

import {NavMenu} from 'my-redux-aware-components';

export function myPage(props) {
  return (<div><NavMenu routes={props.routes} /></div>);
}

рддреЛ рдХреНрдпрд╛ рдореИрдВ рдЗрд╕реЗ рд╕рд┐рд░реНрдл 'NavMenuContainer' рдирд╛рдо рджреВрдВ? рдпрд╣ рдореБрдЭреЗ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИред рдХреНрдпрд╛ рдореБрдЭреЗ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдШрдЯрдХ NavMenuComponent рдХрд╛ рдирд╛рдо рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП? рджреЛрдиреЛрдВ рдореБрдЭреЗ рдЕрдЬреАрдм рд▓рдЧрддреЗ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдШрдЯрдХ рдХреЗрд╡рд▓ рд░рд╛рдЬреНрдп рд╕реЗ 1 рдлрд╝реАрд▓реНрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдиреЗрдХреНрдЯ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред рдХреНрдпрд╛ рдЗрд╕ рддрд░рд╣ рдХрдиреЗрдХреНрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХреЛ рдЗрдирд▓рд╛рдЗрди рдХрд░рдирд╛ рд╡рд╛рдХрдИ рдЗрддрдирд╛ рдмреБрд░рд╛ рд╣реИ?

export default const NavMenu = connect(state => ({currentPath:state.routing.path})(React.createClas({...}));

рдЖрдкрдХреЗ рд╡рд┐рдЪрд╛рд░ рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХ @gaearon рдХрдм (рдпрджрд┐ рдмрд┐рд▓реНрдХреБрд▓ рднреА) рдХрдиреЗрдХреНрдЯ рдХреЙрд▓ рдХреЛ рдЗрдирд▓рд╛рдЗрди рдХрд░рдирд╛ "рдареАрдХ" рд╣реИ ...

рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд╣рддреЗ рд╣реИрдВред рдЗрд╕реЗ NavMenu рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд╣рддреЗ?

рдореИрдВ рдЗрдирд▓рд╛рдЗрдирд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╡рд╛рд▓ рдирд╣реАрдВ рд╕рдордЭрддрд╛ред
рдпрджрд┐ рдЖрдк рддреБрд▓рдирд╛ рдХрд░ рд░рд╣реЗ рджреЛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЗрд╕рд╕реЗ рдорджрдж рдорд┐рд▓реЗрдЧреАред

рдареАрдХ рд╣реИ рддреЛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдПред
рд╡рд┐рдХрд▓реНрдк 1 (реи рдЕрд▓рдЧ рдлрд╛рдЗрд▓реЗрдВ, рдХрдВрдЯреЗрдирд░ рдХреЗ рд▓рд┐рдП рез, рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рез)

рдХрдВрдЯреЗрдирд░/рдирд╡рдореЗрдиреВ

import {connect} from 'react-redux';
import NavMenu from '../components/NavMenu';

export default connect(state => ({currentPath:state.routing.path})(NavMenu);

рд╡рд┐рдХрд▓реНрдк 2 (рджреЛрдиреЛрдВ рд╡рд╛рд▓реА рдПрдХ рдПрдХрд▓ рдлрд╝рд╛рдЗрд▓):
рдШрдЯрдХ/рдирд╡рдореЗрдиреВMe

import {connect} from 'react-redux';

export default connect(state => ({currentPath:state.routing.path})(React.createClass({
  render() {
      return <div>the menu {this.props.currentPath} goes here</div>;
  }
});

рдЗрдирд▓рд╛рдЗрдирд┐рдВрдЧ рд╕реЗ рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ рдПрдХ рдлрд╝рд╛рдЗрд▓ (2 рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд) рд╣реИ рдЬреЛ рдХрдВрдЯреЗрдирд░ рдФрд░ рдШрдЯрдХ рджреЛрдиреЛрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд░рд╛рдЬреНрдп рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рд╡рд░реНрддрдорд╛рди рдкрде рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЗрд╡рд▓ 1 рдЫреЛрдЯрд╛ рд╕рд╛ рд╣реИред рдХреНрдпрд╛ рдпрд╣ рдХреЗрд╡рд▓ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдореЗрд╢рд╛ рдЯрд╛рд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдХреНрдпрд╛ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рд╛рдзрд╛рд░рдг рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдРрд╕рд╛ рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реИ?

рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╕рд╛рдзрд╛рд░рдг рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдРрд╕рд╛ рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реИред

рдЕрдЪреНрдЫрд╛ рдареАрдХ рд╣реИред рдЖрдк рд░реЗрдЦрд╛ рдХрдм рдЦреАрдВрдЪреЗрдВрдЧреЗ рдФрд░ рдХрд╣реЗрдВрдЧреЗ "рдареАрдХ рд╣реИ, рдореИрдВ рдЗрд╕реЗ 2 рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджреВрдВрдЧрд╛"?

рдЬрдм рдШрдЯрдХ рдкреНрд░рд╕реНрддреБрддрд┐ рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдЪрд┐рдВрддрд╛рдУрдВ (рдбреЗрдЯрд╛ рдХреЛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд/рдЧрдгрдирд╛ рдХреИрд╕реЗ рдХрд░реЗрдВ, рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреИрд╕реЗ рдкреНрд░реЗрд╖рд┐рдд рдХрд░реЗрдВ) рдХреЛ рдорд┐рд╢реНрд░рд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИ (рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ)ред рдЬрдм рд╡рд┐рднрд┐рдиреНрди рд╕рдВрджрд░реНрднреЛрдВ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдпрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХрдард┐рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

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

рдзрдиреНрдпрд╡рд╛рдж @gaearon

@sompylasar рдмрд╣реБрдд рдЕрдЪреНрдЫреА рдмрд╛рдд рд╣реИ! рдзрдиреНрдпрд╡рд╛рдж

рд╣рдореНрдо рдареАрдХ рд╣реИ рдЗрд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рджреЛрдмрд╛рд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдХреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЕрдм рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЕрдиреБрд╡рд░реНрддреА рдкреНрд░рд╢реНрди рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ <NavMenuItem> рдХрдВрдЯреЗрдирд░ рднреА рд╣реИред <NavMenu> рдШрдЯрдХ рдХреЛ <NavMenuItem /> рдХреЛ рдЪрд╛рдЗрд▓реНрдб рдПрд▓рд┐рдореЗрдВрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХреНрдпрд╛ рдореБрдЭреЗ рдирд╡рдореЗрдиреВ рдШрдЯрдХ рдореЗрдВ рд╕рд┐рд░реНрдл import NavMenuItem from '../containers/NavMenuItem' рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рдпрд╣ рдЯреЗрд╕реНрдЯреЗрдмрд┐рд▓рд┐рдЯреА @sompylasar рдХреЛ рдХреИрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ?

рдореИрдВ NavMenuItem рдХреЛ рдПрдХ рд╢реБрджреНрдз рдкреНрд░рд╕реНрддреБрддрд┐рдХрд░рдг рдШрдЯрдХ рдмрдирд╛рдКрдВрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ NavMenu рджреНрд╡рд╛рд░рд╛ рдкреНрд░реЙрдкреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рд╕ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред рдпрд╣ рдЗрд╕реЗ рдЕрд▓рдЧ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рддреЛ, рдЖрдкрдХреЗ рдкрд╛рд╕ рджреЛ рдкреНрд░реЗрдЬреЗрдВрдЯреЗрд╢рдирд▓ (NavMenu, NavMenuItem) рдФрд░ рдПрдХ рдХрдиреЗрдХреНрдЯреЗрдб (connect(...)(NavMenuItem) ) рдХрдВрдкреЛрдиреЗрдВрдЯ рд╣реЛрдЧрд╛ред

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

рдПрдлрдбрдмреНрд▓реНрдпреВрдЖрдИрдбрдмреНрд▓реНрдпреВ рдореИрдВрдиреЗ рдЕрдкрдиреА рд╡рд░реНрддрдорд╛рди рд╕реЛрдЪ рдХреЛ рджрд░реНрд╢рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрдЬреЗрдВрдЯреЗрд╢рдирд▓ рдФрд░ рдХрдВрдЯреЗрдирд░ рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕ рдЖрд▓реЗрдЦ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ред

рд╣рдо рдЕрдм рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдЧрдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдореЗрдВ рдХрдВрдЯреЗрдирд░ рдШрдЯрдХ рдмрдирд╛рдиреЗ рдХреЛ рд╣рддреЛрддреНрд╕рд╛рд╣рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ.
http://redux.js.org/docs/basics/UsageWithReact.html

Redux doc рдореЗрдВ рдЖрдкрдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ @gaearon рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдШрдЯрдХреЛрдВ рдореЗрдВ рдмрдЪреНрдЪреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдХрдВрдЯреЗрдирд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рдХреНрдпрд╛ рдореИ рдЧрд▓рдд рд╣реБ? рдпрд╣ рдПрдХ рдЧреВрдВрдЧрд╛ рдШрдЯрдХ рдХреА рдЯреЗрд╕реНрдЯреЗрдмрд┐рд▓рд┐рдЯреА рдХреЛ рдХреИрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕рдХреЗ рдЕрдВрджрд░ рдПрдХ рд╕реНрдорд╛рд░реНрдЯ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИ?
рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рдШрдЯрдХреЛрдВ рдХреЛ рдирд╡реАрдирддрдо рд╣реЛрдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ ...

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

рдбреЙрдХреНрдЯрд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдпрд╣ рдареАрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдпрд╣ рдХреБрдЫ рд╕рдорд╕реНрдпрд╛ рд▓рд╛ рд╕рдХрддрд╛ рд╣реИ?

рдзрдиреНрдпрд╡рд╛рдж!

рдпрд╣ рдПрдХ рдЧреВрдВрдЧрд╛ рдШрдЯрдХ рдХреА рдЯреЗрд╕реНрдЯреЗрдмрд┐рд▓рд┐рдЯреА рдХреЛ рдХреИрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕рдХреЗ рдЕрдВрджрд░ рдПрдХ рд╕реНрдорд╛рд░реНрдЯ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИ?

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

рдареАрдХ рд╣реИ, рддреЛ рдХреЛрдИ рд╕рд╣реА рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рд╣рдореЗрдВ рдорд╛рдорд▓реЗ рджрд░ рдорд╛рдорд▓реЗ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛.. рдХрдИ
рдзрдиреНрдпрд╡рд╛рдж!!

Il luned├м 8 рдлрд░рд╡рд░реА 2016, рдбреИрди рдЕрдмреНрд░рд╛рдореЛрд╡ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рд╣рд╛
рд╕реНрдХреНрд░рд┐рдЯреЛ:

рдпрд╣ рдПрдХ рдЧреВрдВрдЧрд╛ рдШрдЯрдХ рдХреА рдкрд░реАрдХреНрд╖рдг рдХреНрд╖рдорддрд╛ рдХреЛ рдХреИрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕рдХреЗ рдЕрдВрджрд░ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИ
рдПрдХ рд╕реНрдорд╛рд░реНрдЯ?

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

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/rackt/redux/issues/756#issuecomment -181143304ред

рд▓реБрдХрд╛ рдХрд░реНрдирд▓реЛ
+39 345 8948718
рд▓реБрдХрд╛ [email protected]

'рд▓реЗрдЖрдЙрдЯ рдШрдЯрдХреЛрдВ' рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрдИ рдХрдВрдЯреЗрдирд░ рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд░рд╛рдЙрдЯрд░/рдиреЗрд╡рд┐рдЧреЗрдЯрд░ рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдШрдЯрдХ рдореЗрдВ рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдпрд╣ рд░реИрдкрд┐рдВрдЧ рдШрдЯрдХ 'рдХрдВрдЯреЗрдирд░реЛрдВ рдХрд╛ рдЧреВрдВрдЧрд╛ рдкреНрд░рд╕реНрддреБрддрд┐рдХрд░рдг рдХрдВрдЯреЗрдирд░' рд╣реЛрдЧрд╛?

@ Emilios1995 рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реА рдореБрджреНрджрд╛ рд╣реИ ...
рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдкреГрд╖реНрда рдШрдЯрдХ рд╣реИ рдЬреЛ рд▓реЗрдЖрдЙрдЯ рдШрдЯрдХ рдХреЗ рдЕрдВрджрд░ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рдЗрд╕ рд▓реЗрдЖрдЙрдЯ рдШрдЯрдХ рдореЗрдВ рдореЗрдиреВ, рд╢реАрд░реНрд╖рд▓реЗрдЦ, рдкрд╛рдж рд▓реЗрдЦ рд╣реИрдВ .. рд╕рд╛рдордЧреНрд░реА рдкреГрд╖реНрда рджреНрд╡рд╛рд░рд╛ рд▓реЗрдЖрдЙрдЯ рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдмрдЪреНрдЪрд╛ рд╣реИ ..
рдореЗрдиреВ рдФрд░ рд╣реЗрдбрд░ рдХрдВрдЯреЗрдирд░ рд╣реИрдВ !! рддреЛ рд▓реЗрдЖрдЙрдЯ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдХрдВрдЯреЗрдирд░ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реНрдЯреЛрд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдирд╣реАрдВ рд╣реИ..

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдЧрд░ рдореИрдВ рдореЗрдиреВ рдФрд░ рд╣реЗрдбрд░ рдХреЛ рд▓реЗрдЖрдЙрдЯ рдореЗрдВ рдкрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдкреГрд╖реНрда (рдХрдВрдЯреЗрдирд░) рд╣реИ рдЬреЛ рд▓реЗрдЖрдЙрдЯ (рдШрдЯрдХ) рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдореЗрдиреВ рдФрд░ рд╣реЗрдбрд░ (рдХрдВрдЯреЗрдирд░) рдореЗрдВ рднреЗрдЬрддрд╛ рд╣реИред

рдРрд╕рд╛ рдХрд░рдирд╛ рдкрджрд╛рдиреБрдХреНрд░рдо рд╕рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдкреНрд░рддреНрдпреЗрдХ рдкреГрд╖реНрда рдореЗрдВ рдореЗрдиреВ рдФрд░ рд╢реАрд░реНрд╖рд▓реЗрдЦ рджреЛрд╣рд░рд╛рдирд╛ рд╣реИ, рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЗрд░реЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдкреГрд╖реНрда рдореЗрдВ рд╕рдорд╛рди рд╣реИрдВ ..

@LucaColonnello рдореИрдВ рдХреЛрдб рдХреЗ рдмрд┐рдирд╛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рд╕рдордЭ рдирд╣реАрдВ

рдпрдерд╛рд╢реАрдШреНрд░

рдЗрд▓ рд╕рдмрд╛рдЯреЛ 27 рдлрд░рд╡рд░реА 2016, рдбреИрди рдЕрдмреНрд░рд╛рдореЛрд╡ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рд╣рд╛
рд╕реНрдХреНрд░рд┐рдЯреЛ:

@LucaColonnello https://github.com/LucaColonnello рдореИрдВ рдХрд╛рдлреА рдирд╣реАрдВ рд╣реВрдВ
рдХреЛрдб рдХреЗ рдмрд┐рдирд╛ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕рдордЭреЗрдВред рдХреНрдпрд╛ рдореИрдВ рдЖрдкрд╕реЗ a . рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдБ
рдЖрдкрдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рджрд░реНрд╢рд╛рдиреЗ рд╡рд╛рд▓реЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде StackOverflow рдкреНрд░рд╢реНрди? рдореИрдВ рд╣реЛ
рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЦреБрд╢ рд░рд╣реЛред

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/reactjs/redux/issues/756#issuecomment -189672067ред

рд▓реБрдХрд╛ рдХрд░реНрдирд▓реЛ
+39 345 8948718
рд▓реБрдХрд╛ [email protected]

@gaearon рдпрд╣ рдХреЛрдИ рдореБрджреНрджрд╛ рдирд╣реАрдВ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╕рд╡рд╛рд▓ рд╣реИ рдЬреЛ рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рдмрдирд╛рдпрд╛ рд╣реИ: http://stackoverflow.com/questions/35729025/ should-the-route-handlers-use-containers-or-presentational-components ? noredirect=1#comment59133192_35729025

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдорд╛рдзреНрдпрдо рдкрд░ рдбреИрди рдХрд╛ рд▓реЗрдЦ
https://medium.com/@dan_abramov/smart -and-dumb-components-7ca2f9a7c7d0#.3y00gw1mq
рд╕рднреА рдореБрджреНрджреЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ...

реирежрезрем-режрей-режрез резрео:резреп рдЬреАрдПрдордЯреА+режрез:режреж рдПрдорд┐рд▓рд┐рдпреЛ рд╕реНрд░реМрдЧреЛ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com

@gaearon https://github.com/gaearon рдпрд╣ рдХреЛрдИ рдореБрджреНрджрд╛ рдирд╣реАрдВ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╣реИ
рдмрд▓реНрдХрд┐ рдПрдХ рдкреНрд░рд╢реНрди рдЬреЛ рдореИрдВрдиреЗ рдпрд╣рд╛рдБ рдмрдирд╛рдпрд╛ рд╣реИ:
http://stackoverflow.com/questions/35729025/ should-the-route-handlers-use-containers-or-presentational-components?noredirect=1#comment59133192_35729025

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/reactjs/redux/issues/756#issuecomment-190820426 ред

рд▓реБрдХрд╛ рдХрд░реНрдирд▓реЛ
+39 345 8948718
рд▓реБрдХрд╛ [email protected]

@gaearon рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдпрджрд┐ рдПрдХ рдкреНрд░реЗрдЬреЗрдВрдЯреЗрд╢рдирд▓ рдШрдЯрдХ рдореЗрдВ рдХрдВрдЯреЗрдирд░ рдШрдЯрдХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?
рдПрдлрд╡рд╛рдИрдЖрдИ:

рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдпрджрд┐ рдПрдХ рдкреНрд░рд╕реНрддреБрддрд┐рдХрд░рдг рдШрдЯрдХ рдореЗрдВ рдХрдВрдЯреЗрдирд░ рдШрдЯрдХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

рдпрджрд┐ рдЗрд╕рдХреЗ рд╕рднреА рдЙрдкрдпреЛрдЧ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрдВрдЯреЗрдирд░ рд╢рд╛рдорд┐рд▓ рд╣реИ, рддреЛ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдирд╣реАрдВ рд╣реИред рдФрд░ рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдЗрд╕реЗ this.props.children рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ рдФрд░ рдЕрдиреНрдп рдкреНрд░рд╕реНрддреБрддрд┐рдХрд░рдг рдШрдЯрдХ рдмрдирд╛рдПрдВ рдЬреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрдВрдЯреЗрдирд░ рдпрд╛ рдкреНрд░рд╕реНрддреБрддрд┐рдХрд░рдг рдШрдЯрдХреЛрдВ рдХреЛ рдЕрдВрджрд░ рд╕реЗ рдкрд╛рд╕ рдХрд░реЗрдВред

@gaearon рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд░рд╛рдЙрдЯрд░ рдкрд░ [рд░реВрдЯ рдШрдЯрдХ] рдХрдВрдЯреЗрдирд░ рдШрдЯрдХ рд╣реИ?

  • рдорд╛рд░реНрдЧ.рдЬреЗрдПрд╕
<Route path="/" component={Root}>
      <IndexRoute component={Main} />
      <Route path="/account/signIn" component={SignIn} />
</Route>
  • root.js
export default class Root extends React.Component {
  render() {
    return (
      <div>
        <div id="container" className="container">
          {this.props.children}
        </div>
      </div>
    );
  }

рдзрдиреНрдпрд╡рд╛рджред

@gaearon рдКрдкрд░ рдЖрдкрдиреЗ рдХрд╣рд╛ рдерд╛ рдХрд┐ рдЖрдк рдкреНрд░реЗрд╖рдг рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдШрдЯрдХреЛрдВ рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ (рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕реЗ рдореВрд▓ рдШрдЯрдХреЛрдВ рд╕реЗ рдиреАрдЪреЗ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдкрд░реАрдд)ред

рдпрджрд┐ рдЖрдк рдЗрди рдШрдЯрдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдФрд░ рдЙрдирдХреЗ рдкрд╛рд╕ рдкреНрд░реЙрдкреНрд╕ рднреА рд╣реИрдВ рдЬреЛ _could_ рдХреЛ рд░реЗрдбреНрдпреВрд╕рд░ рд╕реЗ рдореИрдк рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдорд╛рддрд╛-рдкрд┐рддрд╛ рджреНрд╡рд╛рд░рд╛ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рддреЛ рдХреНрдпрд╛ рдЖрдк рдЗрдиреНрд╣реЗрдВ connect рд╕реЗ рдЖрдиреЗ рдХреЗ рд▓рд┐рдП рд░рд┐рдлреИрдХреНрдЯрд░ рдХрд░реЗрдВрдЧреЗ? рдпрд╛ рдорд╛рддрд╛-рдкрд┐рддрд╛ рджреНрд╡рд╛рд░рд╛ рдкрд╛рд░рд┐рдд рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП ownProps рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рдХреНрдпрд╛ рджреЛ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдмреАрдЪ рдХреЛрдИ рдХрд╛рд░реНрдпрд╛рддреНрдордХ/рдкреНрд░рджрд░реНрд╢рди рдЕрдВрддрд░ рд╣реИ?

рдореБрдЭреЗ рд╡рд┐рд╢рд╛рд▓ рд░реЗрдбрдХреНрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдЬреНрдпрд╛рджрд╛ рдЕрдиреБрднрд╡ рдирд╣реАрдВ рд╣реИ рд▓реЗрдХрд┐рди рдореИрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛/рд░реЗрдбрдХреНрд╕ рдлрд╝рд╛рдЗрд▓ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рд╢реЛрдз рдФрд░ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВред рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рд╣реИ рдпрд╛ рдирд╣реАрдВ:

src/
  components/
    header/ 
      navigation.js # nav menu list
      index.js # Header component
  modules/
    header/
      actions.js # header actions (sticky scroll, collapse mobile menu, etc...)
      reducer.js # header actions reducer (export to modules index)
      index.js # HeaderContainer (connect to Header component)
    index.js # combineReducers and export default configureStore (and middleware)

рдПрдХ рдФрд░ рдЕрд╡рдзрд╛рд░рдгрд╛:

src/
  components/
    navigation.js
    logo.js
    link.js
    list.js
    item.js
  modules/
    header/
      actions.js # header actions 
      wrapper.js # header class (smart) component - to wrap header with functionality (was previously classified as container)
      container.js # header functional (dumb) component - to contain universal components
      index.js # header actions reducer - to export into modules rootReducer 

рдпрд╛ рдШрдЯрдХреЛрдВ, рдХрдВрдЯреЗрдирд░реЛрдВ рдФрд░ рд░реЗрдбрдХреНрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЕрд▓рдЧ рд░рдЦрдирд╛ рдмреЗрд╣рддрд░ рд╣реИ (рднрд▓реЗ рд╣реА рд╡реЗ рдПрдХ рд╣реА рдирд╛рдо рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реЛрдВ)? рдХрд┐рд╕реА рднреА рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

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

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

image
image
image

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

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

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

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

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

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

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

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