äŸã§ã¯ãåžžã«ãcontainerããšãããã©ã«ããšãcomponentããšãããã©ã«ãããããŸãã ãã®åé¢ã®èåŸã«ããèãã¯äœã§ããïŒ
ãã³ã³ãããã¯ã¹ããŒãã³ã³ããŒãã³ãã§ããããããšãã«ãŒãã£ã³ã°ã³ã³ããŒãã³ããäœãä»ã®ãã®ã§ããïŒ ãã³ã³ããŒãã³ããã®äžã®ã³ã³ããŒãã³ãã¯åžžã«ãã ã§ããå¿ èŠããããŸããïŒ
ç§ã®å Žåã container
ã¯ã«ãŒãã®ãã³ãã©ãŒã§ããããã®ã«ãŒãã®reduxã®ç¶æ
ããã«ããŸãã ããããç§ã¯èªåã®ç¶æ
ãå°éå
·ãšããŠäŒããŸãã
äŸãã°ã
container / properties.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;
ãããŠãäŸãã°ã
components / properties / pagination.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. "
ãã³ã³ãããã¯å®éã«ã¯reduxã§ãã¹ããŒãã³ã³ããŒãã³ãããšåŒã°ãããã®ã§ãããšç§ã¯ããæããŸã...ãããŠã«ãŒã/ããŒãžã¯ç¬èªã®ãã©ã«ããååŸããå¿ èŠããããŸãã
ãã³ã³ããããšãã«ãŒããã³ãã©ããäœããã®åœ¢ã§é¢é£ããŠããçç±ãããããŸãããïŒ
ã¢ããªã®ã³ã³ããŒãã³ããã«ãŒãããšã«ã°ã«ãŒãåããããšã¯éåžžã«äžè¬çãªæ¹æ³ã§ãã @theaquaãææããããã«ãåã«ãŒããã³ãã©ãŒ/ã³ã³ããŒãã³ããã¹ããŒã/ã³ã³ãããŒã³ã³ããŒãã³ãã«ããããšãäžè¬çã§ãã CombineReducersã䜿çšããŠããå Žåãåãè¡ã«æ²¿ã£ãŠç¶æ ãã«ãŒããããã³ã³ã³ãããŒãåå²ããŠããããšã«æ°ä»ãããšããããããŸãã ãããã£ãŠããããã¯ãã°ãã°äžç·ã«é¢é£ä»ããããŸãã
@ronagã³ã³ãããããŒãžãäœæããå¿ èŠã¯ãªããšæããŸããã ã«ãŒããã³ãã©ãŒãšreduxã³ãã¯ã¿ã1ãæã®ç¶æ ã«ã§ããªãã®ã¯ãªãã§ããïŒ ãšãŠã䟿å©ã§ãã è€éã«ããªãã§ããã
ç§ã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ã3ã€ã®ã«ãŒã/ããŒãžãããããŸããã äžæ¹ãç§ã¯ããããã®ç¬ç«ããããã«/ã¢ãžã¥ãŒã«ãæã£ãŠããŸãã 1ã€ã®å·šå€§ãªconnect
ãäœæããããšã¯çŸå®çã§ã¯ãããŸãããå°ãªããšããããã«ã®èŠ³ç¹ããåå²ããå¿
èŠããããŸãã
ç¶æ ããå°éå ·ãžã®ãã¹ãŠã®ãããã³ã°ãšãã¹ãŠã®ããŒã¿ãã§ãããåäžã®ãã¡ã€ã«ã§è¡ããšãä¿å®ã§ããªããªããŸãã ç¹ã«ããã¹ãŠã®ããŒã¿ãã§ãããåãå Žæã§è¡ãå Žåã
ã«ãŒãã3ã€ããå Žåã¯ã3ã€ã®ã«ãŒããã³ãã©ãŒãå¿
èŠã§ãã ããšãã°ã A.jsx
ã B.jsx
ã C.jsx
/containers
ã§ãã
åã³ã³ããã§ãreduxç¶æ
ã®äžéšïŒå
šäœã§ã¯ãããŸããïŒïŒããã«ãããšãã¢ã¯ã·ã§ã³ããã€ã³ããããŸãã 次ã«ããããç§ã®äŸã®ããã«ã³ã³ããŒãã³ãã«æž¡ããŸãã ç§ïŒãšç§ã®ããŒã ïŒãç¥ã£ãŠããã®ã§ãããã¯éåžžã«ä¿å®å¯èœã§ãâ reduxã«æ¥ç¶ããã¢ã¯ã·ã§ã³ã¯åžžã«containers
ã§ãã€ã³ãããã components
ãªãããšã¯ãããŸããïŒããã¯å°ãããç§ã®äŸã®ããã«ã¹ããŒãã¬ã¹ã§ããããšããããããŸãïŒ ïŒã
ç§ã¯ããªãã®ææ¡ãç解ããŠãããšæããŸãã ãã ããåè¿°ããããã«ããã¹ãŠã®ããŒã¿ãã§ãããããã«é 眮ãããšãããã3ã€ã®ãã¡ã€ã«ã¯éåžžã«è€éã«ãªããŸãã ç§ãã¡ã®åå ã§ã¯ãåºæ¬çã«ããã°ã€ã³ãã¢ããªããã°ã¢ãŠããã§ãããã¢ããªã«ã¯ã»ãšãã©ãã¹ãŠãå«ãŸããŸãã
ãã¶ãç§ã¯Relay
ã«åããããŠãããåã³ã³ããŒãã³ãã«ã¯ããã§ããããããŒã¿ãšãã®å€èŠ³ã説æããã³ã³ãããŒããããŸãã
ç§ã¯ããªãã®ææ¡ãè©ŠããŠãç§ãã¡ãã©ãã«è¡ãçãããèŠãŸãã
ç§ã¯components
ã«ãã»ã«åãããReactã³ã³ããŒãã³ããåŒã³åºããŸããããã¯ãå°éå
·ã«ãã£ãŠã®ã¿é§åãããReduxãšã¯éä¿¡ããŸããã ããã ã³ã³ããŒãã³ãããšåãã§ãã ã«ãŒã¿ãŒãããŒã¿ãã§ããã©ã€ãã©ãªãªã©ã«é¢ä¿ãªããåããŸãŸã§ããå¿
èŠããããŸãã
ç§ã¯containers
Reactã³ã³ããŒãã³ããåŒã³åºããŸãããããã¯ãReduxãã«ãŒã¿ãŒãªã©ãèªèããŠããŸãããããã¯ãã¢ããªãšããçµåãããŠããŸãã ãã¹ããŒãã³ã³ããŒãã³ãããšåãã§ãã
@gaearon ïŒå®ç§ã§ãã ããã§äŸãæ確ã«ãªããŸãã ããããšãããããŸããã
@gaearonã€ãŸããããã ã³ã³ããŒãã³ããã¯ã¹ããŒãã¬ã¹ã³ã³ããŒãã³ãã§ããã React 0.14以éãããåçŽãªæ§æã§èšè¿°ã§ããŸãã次ã«äŸã瀺ããŸãã
var Aquarium = (props) => {
var fish = getFish(props.species);
return <Tank>{fish}</Tank>;
};
ç§ã¯æ£ããã§ããïŒ
@soulmachineããã
å¿ ãããã æ§æã¯éèŠã§ã¯ãããŸããã
ããã ãã³ã³ããŒãã³ããå¥åããã¬ãŒã³ããŒã·ã§ã³ãã³ã³ããŒãã³ãã¯ãå°éå ·ã«ãã£ãŠãã¹ãŠã®ããŒã¿ãåãåããReduxãèªèãããå€èŠ³ã®ã¿ãæå®ããåäœã¯æå®ããªãã³ã³ããŒãã³ãã§ãã
@theaqua @gaearonããããšãïŒ
ãã³ã³ããããšããçšèªã¯ãreact / reduxã®åœåæ³ã§ãã§ã«éåžžã«äººæ°ããããŸãããã¬ã€ã¢ãŠã/ã°ã©ãã£ãã¯ã³ã³ãããšã®æ··åãé¿ããããã«ãç§ãåãçµãã§ãããããžã§ã¯ãã§ã¯ãã³ãã¯ã¿ããšåŒã¶ããšã«ããŸããã
ãšããã§ãããããåŒã³åºãæ¹æ³ã¯ãããã§ä»¥åã«rackt / react-reduxïŒ170ã§èª¬æãããŠããŸãã ç§ã¯ãã¹ãŠãcomponents
ãã©ã«ããŒå
ã«ä¿æãããã¬ãŒã³ããŒã·ã§ã³çšã®ãã®ã¯1ã¬ãã«æ·±ãã 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({...}));
æ¥ç¶åŒã³åºããã€ã³ã©ã€ã³åããã ãã§ã倧äžå€«ããªã®ã¯ãã€ãïŒããããã°ïŒã«ã€ããŠã®
ã©ã®ããã«åŒãã§ãæ§ããŸããã ãããNavMenu
ãšåŒãã§ã¿ãŸãããïŒ
ã€ã³ã©ã€ã³åã«ã€ããŠã®è³ªåãããããŸããã
æ¯èŒããŠãã2ã€ã®ã¢ãããŒããæ瀺ãããšåœ¹ç«ã¡ãŸãã
ããšãã°ãããã§ããã
ãªãã·ã§ã³1ïŒ2ã€ã®åå¥ã®ãã¡ã€ã«ã1ã€ã¯ã³ã³ãããŒçšã1ã€ã¯ã³ã³ããŒãã³ãçšïŒ
ã³ã³ãã/ NavMenu
import {connect} from 'react-redux';
import NavMenu from '../components/NavMenu';
export default connect(state => ({currentPath:state.routing.path})(NavMenu);
ãªãã·ã§ã³2ïŒäž¡æ¹ãå«ã1ã€ã®åäžãã¡ã€ã«ïŒïŒ
ã³ã³ããŒãã³ã/ NavMenu
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>;
}
});
ã€ã³ã©ã€ã³åãšã¯ãç¶æ ããå¿ èŠãªcurrentPathã«ã€ããŠã»ãã®å°ããããªããããã³ã³ãããšã³ã³ããŒãã³ãã®äž¡æ¹ã§ãã1ã€ã®ãã¡ã€ã«ïŒ2ã€ã®ãã¡ã€ã«ã§ã¯ãªãïŒãæã€ããšãæå³ããŸãã ããã¯åžžã«é¿ããã¹ããã®ã§ããããããšããã®ãããªåçŽãªã±ãŒã¹ã§è¡ãã®ãåççã§ããïŒ
確ãã«ãåçŽãªã±ãŒã¹ã§ãããè¡ãã®ã¯åççã§ãã
ãããããã ãã€ç·ãåŒããŠãããã2ã€ã®å¥ã ã®ãã¡ã€ã«ã«ç§»åããŸãããšèšããŸããïŒ
ã³ã³ããŒãã³ããããŒã¿ã®æžå¿µäºé ïŒããŒã¿ã®ååŸ/èšç®æ¹æ³ãã¢ã¯ã·ã§ã³ã®ãã£ã¹ãããæ¹æ³ïŒãšãã¬ãŒã³ããŒã·ã§ã³ïŒå€èŠ³ïŒãæ··åãå§ãããšãã å¥ã®ã³ã³ããã¹ãã§ãã¹ããŸãã¯åå©çšããããšãå°é£ã«ãªã£ããšãã
@benmonroãã1ã€èããŸããã ã³ã³ããŒãã³ãã®ã¢ãžã¥ãŒã«ãæ§ç¯ããŠããå Žåã¯ããããã®ã³ã³ããŒãã³ããã¢ããªã®ç¶æ
ããªãŒã®ããŸããŸãªéšåã«æ¥ç¶ããããããŸããŸãªç¶æ
ã§åå¥ã«ãã¬ãŒã³ããŒã·ã§ã³ããã¹ããããããããšããããŸãã ãã®å Žåãã³ã³ããŒãã³ãã®ãã®ã¢ãžã¥ãŒã«å
ã«connect
ããããšããã®æ©èœãå¶éãããŸãã
ããããšã@gaearon
@sompylasaréåžžã«è¯ãç¹ã§ãïŒ ããããšã
ã³ãŒãããªãã¡ã¯ã¿ãªã³ã°ããŠåå²ããåŸããã©ããŒã¢ããã®è³ªåããããŸãã <NavMenuItem>
ã³ã³ããããããšããŸãã <NavMenu>
ã³ã³ããŒãã³ãã¯ãåèŠçŽ ãšããŠ<NavMenuItem />
ãåç
§ããå¿
èŠããããŸãã NavMenuã³ã³ããŒãã³ãã§import NavMenuItem from '../containers/NavMenuItem'
ãå®è¡ããå¿
èŠããããŸããïŒ ããã¯ãã¹ã容ææ§@sompylasarã«ã©ã®ããã«åœ±é¿ããŸããïŒ
NavMenuItemãçŽç²ãªãã¬ãŒã³ããŒã·ã§ã³ã³ã³ããŒãã³ãã«ããå¿ èŠãªãã¹ãŠã®ããŒã¿ãNavMenuã«ãã£ãŠå°éå ·ãä»ããŠæž¡ãããŸãã ããã«ãããåå¥ã«ãã¹ãã§ããŸãã ãããã£ãŠã2ã€ã®ãã¬ãŒã³ããŒã·ã§ã³ïŒNavMenuãNavMenuItemïŒãš1ã€ã®æ¥ç¶ãããïŒconnectïŒ...ïŒïŒNavMenuItemïŒïŒã³ã³ããŒãã³ãããããŸãã
ãã®ãã£ã¹ã«ãã·ã§ã³ã§ç§ãèŠéããŠããããšïŒ1ã€ã®ãã¡ã€ã«ã«ããããããå Žåããã¹ãã«æµ ãã¬ã³ããªã³ã°ã䜿çšããããšã¯ã§ããŸããã ãã¬ãŒã³ããŒã·ã§ã³ã³ã³ããŒãã³ããšã³ã³ããã³ã³ããŒãã³ãã®äž¡æ¹ãå ¬éããŠãããåé¿ããåå¥ã«ãã¹ãããã®ãèŠãŠããŸããããããã£ãŠããã®å Žåã¯ããããã2ã€ã§ããããšãæ瀺ããããã«2ã€ã®ãã¡ã€ã«ãå¿ èŠã§ãã ããã¯ãŸããããã§ã®é¢å¿ã®åé¢ãšããã¬ãŒã³ããŒã·ã§ã³ã³ã³ããŒãã³ããç¬ç«ããŠããŠåå©çšå¯èœã§ãããšããäºå®ãæµ®ã圫ãã«ããŸãã
FWIWçŸåšã®èããåæ ããããã«ããã¬ãŒã³ããŒã·ã§ã³ãšã³ã³ããã³ã³ããŒãã³ãã®èšäºãæŽæ°ããŸããã
æŽæ°ãããããã¥ã¡ã³ãã§ã³ã³ããã³ã³ããŒãã³ããäœæããããšã¯æšå¥šãããªããªããŸããã
http://redux.js.org/docs/basics/UsageWithReact.html
Reduxããã¥ã¡ã³ãã®å®éã®äŸã®@gaearonã¯ãã³ã³ããŒãã³ããåãšããŠã³ã³ãããæã€ããšãã§ããããã§ãã
ç§ãééã£ãŠããïŒ ããã¯ãå
éšãã¹ããŒãã«ãããã ã³ã³ããŒãã³ãã®ãã¹ã容ææ§ã«ã©ã®ããã«åœ±é¿ããŸããïŒ
ãã ããã³ã³ããŒãã³ããéå±€å
ã®ææ°ã®ã³ã³ããŒãã³ãã«ããæ¹æ³ãèŠã€ãããŸãã...
Simple Data Listã³ã³ããŒãã³ãïŒãã ïŒãã¬ã³ããªã³ã°ããã¢ããªããããŸãã
ãã®äžã§ãã¹ãŠã®ã¢ã€ãã ãã¹ãã¢ã«æ¥ç¶ãããŠããå¿
èŠãããã®ã§ãããã¯ã¹ããŒããªãã®ã§ãã
ããã¥ã¡ã³ãã«ãããšå€§äžå€«ã§ãããåé¡ãçºçããå¯èœæ§ã¯ãããŸããïŒ
æè¬ïŒ
ããã¯ãå éšãã¹ããŒãã«ãããã ã³ã³ããŒãã³ãã®ãã¹ã容ææ§ã«ã©ã®ããã«åœ±é¿ããŸããïŒ
ããã«ããããã¹ãã®ã»ããã¢ãããå°ãé£ãããªããŸãïŒã¹ãã¢ãåæåããå¿
èŠããããŸãïŒã ãããäžäŸ¿ãªå Žåã¯ã children
ãåãå
¥ãããã¬ãŒã³ããŒã·ã§ã³ã³ã³ããŒãã³ããããã«æœåºããŠãã³ã³ããã³ã³ããŒãã³ããå
éšã«æž¡ãããšãã§ããããã«ããŸãã äžè¬ã«ãåå²ã¯ããªã次第ã§ããããã¬ãŒããªãïŒæžã蟌ã¿ã®å®¹æãããªãã¡ã¯ã¿ãªã³ã°ããã¹ããªã©ïŒãè©äŸ¡ããã³ã³ããŒãã³ããèªåã§åé¢ããæ¹æ³ãéžæããå¿
èŠããããŸãã
ããããŸãããããã§æ£ããæ¹æ³ã¯ãããŸããã ã±ãŒã¹ãã€ã±ãŒã¹ã§è©äŸ¡ããå¿
èŠããããŸãã
ããããšãïŒ
IIã¯2016 febbraio 8ãlunedìããã³ã»ã¢ãã©ã¢ã[email protected]ãã¯ã¿ãŒã«
ã¹ã¯ãªããïŒ
ããã¯ãå éšã§ã¬ã³ããªã³ã°ããããã ã³ã³ããŒãã³ãã®ãã¹ã容ææ§ã«ã©ã®ããã«åœ±é¿ããŸãã
ã¹ããŒããªãã®ïŒããã«ããããã¹ãã®ã»ããã¢ãããå°ãé£ãããªããŸãïŒåæåããå¿ èŠããããŸãïŒ
ã¹ãã¢ãïŒã ãããäžäŸ¿ãªå Žåã¯ãããã«æœåºããŠãã ãã
ã³ã³ãããæž¡ãããšãã§ããããã«åãåãå ¥ãããã¬ãŒã³ããŒã·ã§ã³ã³ã³ããŒãã³ã
å éšã®ã³ã³ããŒãã³ãã äžè¬çã«ãåå²ã¯ããªã次第ã§ãããããªãã¯ããå¿ èŠããããŸã
ãã¬ãŒããªãïŒèšè¿°ã®ããããããªãã¡ã¯ã¿ãªã³ã°ããã¹ããªã©ïŒãè©äŸ¡ãã
ã³ã³ããŒãã³ããèªåã§åé¢ããæ¹æ³ãéžæããŠãã ãããâ
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/rackt/redux/issues/756#issuecomment-181143304 ã
ã«ã«ã»ã³ããã
+39 345 8948718
ã«ã«ã [email protected]
ãã¬ã€ã¢ãŠãã³ã³ããŒãã³ããã¯ã©ãã§ããïŒ ã€ãŸããã«ãŒã¿ãŒ/ããã²ãŒã¿ãŒã«æž¡ãããã«åäžã®ã³ã³ããŒãã³ãã«å«ããå¿ èŠã®ããã³ã³ãããŒãå€æ°ããå Žåããã®ã©ããã³ã°ã³ã³ããŒãã³ãã¯ããã³ã³ãããŒã®ãã ãã¬ãŒã³ããŒã·ã§ã³ã³ã³ãããŒãã«ãªããŸãããïŒ
@ Emilios1995åãåé¡ããããŸã...
ã¬ã€ã¢ãŠãã³ã³ããŒãã³ãå
ã§äœ¿çšããPageã³ã³ããŒãã³ãããããŸãã
ãã®ã¬ã€ã¢ãŠãã³ã³ããŒãã³ãã«ã¯ãã¡ãã¥ãŒãããããŒãããã¿ãŒããããŸããã³ã³ãã³ãã¯ãããŒãžããã¬ã€ã¢ãŠãã«æž¡ãããåã§ãã
ã¡ãã¥ãŒãšããããŒã¯ã³ã³ããã§ãïŒ ãããã£ãŠãã¬ã€ã¢ãŠãã¯æœåšçã«ã³ã³ããã§ãããã¹ãã¢ã«æ¥ç¶ãããŠããŸããã
ãã ããã¡ãã¥ãŒãšããããŒã®ã¬ã€ã¢ãŠãã«æž¡ãããšãããšãã¬ã€ã¢ãŠãïŒã³ã³ããŒãã³ãïŒãã¬ã³ããªã³ã°ããããŒãžïŒã³ã³ãããŒïŒããããã¡ãã¥ãŒãšããããŒïŒã³ã³ãããŒïŒãæž¡ããŸãã
ãããè¡ããšéå±€ã¯æ£ããã§ããããã¹ãŠã®ããŒãžã§ã¡ãã¥ãŒãšããããŒãç¹°ãè¿ãå¿ èŠãããããããã®ãããã¯ãã¹ãŠã®ããŒãžã§åãã§ãã
@LucaColonnelloã³ãŒãããªããšåé¡ã¯ããããããŸããã åé¡ã説æããç°¡åãªäŸã䜿çšããŠStackOverflowã®è³ªåãäœæããããã«ãé¡ãã§ããŸããïŒ ãããããé¡ãããŸãã
ã§ããã ãéãã«
ã€ã«ãµãã27 febbraio 2016ããã³ã»ã¢ãã©ã¢ã[email protected]ãã¯ã¿ãŒã«
ã¹ã¯ãªããïŒ
@LucaColonnellohttps ïŒ//github.com/LucaColonnelloç§ã¯ãããããŸãã
ã³ãŒããªãã§åé¡ãç解ããŸãã äœæããŠããã ããŸãã
ããªãã®åé¡ã説æããç°¡åãªäŸã§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
ãã¹ãŠã®åé¡ãæ確ã«ããŸã...
2016幎3æ1æ¥ååŸ06æ19åGMT + 01ïŒ00ãšããªãªSrougo [email protected] ïŒ
@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 [ã«ãŒãã³ã³ããŒãã³ã]ã³ã³ããã³ã³ããŒãã³ãã¯React-Routerã«ãããŸããïŒ
<Route path="/" component={Root}>
<IndexRoute component={Main} />
<Route path="/account/signIn" component={SignIn} />
</Route>
export default class Root extends React.Component {
render() {
return (
<div>
<div id="container" className="container">
{this.props.children}
</div>
</div>
);
}
ããããšãã
äžèšã®@gaearonã¯ãïŒèŠªã³ã³ããŒãã³ãããåãæž¡ãã®ã§ã¯ãªãïŒãã£ã¹ãããã«ã¢ã¯ã»ã¹ããããã«ã³ã³ããŒãã³ããæ¥ç¶ããããšã奜ããšè¿°ã¹ãŸããã
ãããã®ã³ã³ããŒãã³ããæ¥ç¶ããçŸåšèŠªããæž¡ãããŠããã¬ãã¥ãŒãµãŒãããããã³ã°ã§ããå°éå
·ãããå Žåããããããªãã¡ã¯ã¿ãªã³ã°ããŠconnect
ããååŸããŸããïŒ ãŸãã¯ã ownProps
ã䜿çšããŠã芪ããæž¡ããããŸãŸã«ããŸãã
2ã€ã®ãªãã·ã§ã³ã®éã«æ©èœ/ããã©ãŒãã³ã¹ã®éãã¯ãããŸããïŒ
ç§ã¯å·šå€§ãªreduxãããžã§ã¯ãã§ã®äœæ¥çµéšã¯ããŸããããŸããããreact / reduxãã¡ã€ã«æ§é ã®æé©åã«ã€ããŠå€ãã®ããšãç 究ããŠèããŠããŸããã ãããçã«ããªã£ãŠãããã©ããæããŠãã ããïŒ
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
ãããšããã³ã³ããŒãã³ããã³ã³ãããreduxã¢ãžã¥ãŒã«ãå¥ã ã«ä¿ã€æ¹ãè¯ãã§ããïŒåãååãå ±æããŠããå Žåã§ãïŒïŒ ãå ¥åããã ãããããšãããããŸãã
ç§ã¯ãšã³ã¿ãŒãã©ã€ãºã¬ãã«ã®react-reduxãããžã§ã¯ããæ±ã£ãŠããŸããããç§ã®çµéšããããããžã§ã¯ãã®ã¢ãŒããã¯ãã£ãã©ã®ããã«å®çŸ©ãããã¯ããªã次第ã ãšèšããŸãã Reactã®ç®çãåå©çšå¯èœãªã³ã³ããŒãã³ãããŒã¹ã®UIãäœæããããšã§ãããšããæå³ã§å®çšçã§ã¯ãªããããã³ã³ãã/ã³ã³ããŒãã³ãããŒã¹ã®ã¢ãŒããã¯ãã£ã®ããªãšãŒã·ã§ã³ã«ã¯åŸããŸããã
ããã§ãã¢ãžã¥ãŒã«ã«åºã¥ããŠãããžã§ã¯ãå šäœãã°ã«ãŒãåãããšããåçŽãªã¢ãããŒããèãåºããŸããããããŸã§ãã¹ã±ãŒã©ããªãã£ãä¿å®æ§ãããã³ã³ãŒãã®å¯èªæ§ã®ç¹ã§éåžžã«ããŸãæ©èœããŠããŸããã
ç§ã«ãšã£ãŠãã³ã³ãããšã¹ããŒãã³ã³ããŒãã³ãã¯ãŸã£ããåãã§ãã ç°¡åãªå®çŸ©ã¯æ¬¡ã®ãšããã§ãã
ã³ã³ãã/ã¹ããŒãã³ã³ããŒãã³ãã¯ãJSXããŒã¯ã¢ãã+ã€ãã³ããã³ãã©ãŒ+ APIåŒã³åºã+ reduxã®connect / MSTP / MSDPãå«ããã®ã§ãã
ãã ã³ã³ããŒãã³ãã¯ãçŽç²ã«ãã¬ãŒã³ããŒã·ã§ã³çãªæ©èœã³ã³ããŒãã³ãã§ãã
æãåèã«ãªãã³ã¡ã³ã
ç§ã¯
components
ã«ãã»ã«åãããReactã³ã³ããŒãã³ããåŒã³åºããŸããããã¯ãå°éå ·ã«ãã£ãŠã®ã¿é§åãããReduxãšã¯éä¿¡ããŸããã ããã ã³ã³ããŒãã³ãããšåãã§ãã ã«ãŒã¿ãŒãããŒã¿ãã§ããã©ã€ãã©ãªãªã©ã«é¢ä¿ãªããåããŸãŸã§ããå¿ èŠããããŸããç§ã¯
containers
Reactã³ã³ããŒãã³ããåŒã³åºããŸãããããã¯ãReduxãã«ãŒã¿ãŒãªã©ãèªèããŠããŸãããããã¯ãã¢ããªãšããçµåãããŠããŸãã ãã¹ããŒãã³ã³ããŒãã³ãããšåãã§ãã