人æ°ã®ãããã¹ãŠã®ãµã€ãã§å€§éã®ããã¥ã¡ã³ããèªã¿ãŸããããçãã¯ã©ãã«ãèŠã€ãããŸããã§ããã ç§ã¯ããã§ãããã€ãã®ããã¥ã¡ã³ããéèŠãªç解ãèŠéããŠããªããã©ããã確èªããããã«æ±ããŠããŸãã
ç§ãèŠãŠããåé¡ã¯ãã³ã³ããŒãã³ãã®mapStateToPropsïŒïŒé¢æ°ãïŒåæåæã«ïŒäžåºŠã ãåŒã³åºãããããšã§ãã ã¬ãã¥ãŒãµãŒãåŒã³åºãããŠããå床åŒã³åºãããããšã¯ãããŸããã ã¢ã¯ã·ã§ã³/ãªãã¥ãŒãµãŒ/å°éå ·ããã¹ãŠã©ã®ããã«çµã³ã€ããŠããã®ãç解ããŠããªãããã ãšæãå§ããŠããŸãã
ç§ãç¥ã£ãŠããããšãæåã«èšãããŠãã ããïŒ
ããã...ã¢ã¯ã·ã§ã³ãã¬ãã¥ãŒãµãŒãmapStateToPropsããã¹ãŠäºãã«ã©ã®ããã«é¢é£ããŠãããã«ã€ããŠã®èª¬æã¯èŠã€ãããŸããã§ããã ç§ã®è³ªåïŒ
http://redux.js.org/docs/Troubleshooting.htmlã«ç®ãéããã±ãŒã¹ã説æãããŠããåé¡ã®1ã€ã§ã¯ãªãããšã確èªããŸãããïŒ
ã¹ãã¢ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ç¶æ ã«é¢ããããŒã¿ãä¿æããããããã£ãæã€ãªããžã§ã¯ãã§ãããšæããŸãã ãããã®ãããã¬ãã«ã®ããããã£ã¯ãã¢ããªã±ãŒã·ã§ã³ã®äžéšã«é¢ããæ å ±ãä¿æããããã®ãµãããªãŒãæäŸãããªããžã§ã¯ãã«ããããšãã§ããŸãã ããã¯æ¬åœã§ããïŒ
ããã Storeã¯ãæäžäœã®ç¶æ
ãªããžã§ã¯ããå
éšçã«ä¿æããŸãã store.getState()
ãããã®ãªããžã§ã¯ããžã®ã¢ã¯ã»ã¹ãæäŸããŸãã ãã®ãªããžã§ã¯ãã¯ãã«ãŒãã¬ãã¥ãŒãµãŒããè¿ããããã®ãã¹ãŠã«å¯Ÿå¿ããå€ãã®å ŽåãããªãŒã®ãããªãã®ã§ãã
ã¢ã¯ã·ã§ã³ãã¹ãã¢ã«ãã£ã¹ãããããããšãã©ã®ããããã£ïŒãŸãã¯ã¹ãã¢ã®ãµãããªãŒïŒãæŽæ°ãããŸããïŒ ã¹ãã¢å ã®ããããã£ã®èªåäœæ/é¢é£ä»ããããããã§ãããããã¯ã©ã®ããã«æ±ºå®ãããŸããïŒ
ããããèªåäœæã¯ãããŸããã ã¹ãã¢ã¯ãã«ãŒãã¬ãã¥ãŒãµãŒãåŒã³åºããçµæããã€ã³ããå§ããŸãã
ã«ãŒãã¬ãã¥ãŒãµãŒãèªåã§äœæããé¢æ°ã§ããå Žåããã®çµæã¯ãã¢ã¯ã·ã§ã³ããã£ã¹ãããããåŸã«åŸããããã®ã§ãã
function counter(state = 0, action) {
if (action.type === 'INCREMENT') {
return state + 1; // will become the next value of store.getState() after store.dispatch()
}
return state;
}
combineReducers({ foo, bar })
ãããªãã®ã§ã«ãŒãã¬ãã¥ãŒãµãŒã_çæ_ããå Žåã次ã®ããã«æåã§ã«ãŒãã¬ãã¥ãŒãµãŒãäœæããå Žåãšåãã§ãã
function root(state = {}, action) {
return {
foo: foo(state.foo, action),
bar: bar(state.bar, action)
}
}
ããã¯ãå·ã®ããããã£ããã°ãã°ç±æ¥ãããšããã§ãã ãããã®å€ã¯ãã¢ã¯ã·ã§ã³ã®åŠçäžã«ããããfoo
ããã³bar
ã¬ãã¥ãŒãµãŒãè¿ããã®ã«ãã£ãŠæ±ºå®ããããããããããå®å
šã«å¶åŸ¡ã§ããŸãã
mapStateToPropsã¯ãã¹ãã¢ã®é©åãªããããã£/éšåã®æŽæ°ããªãã¹ã³ããããšãã©ã®ããã«ãèªèãããŸããïŒ äœãããããçµã³ã€ããŸããïŒ
mapStateToProps
ãconnect()
é¢æ°ã«æž¡ããŸãã store.subscribe()
ã䜿çšããŠãã¹ãã¢ãžã®ãã¹ãŠã®å€æŽããªãã¹ã³ããã³ã³ããŒãã³ããçæããŸãã ã¹ãã¢ãå€æŽããããšãçæãããã³ã³ããŒãã³ãã¯store.getState()
ãèªã¿åãããããmapStateToProps()
ã«æž¡ããŠã次ã«æž¡ãããå°éå
·ã決å®ããŸãã ããããå€æŽãããå Žåãã³ã³ããŒãã³ããããããšãšãã«åã¬ã³ããªã³ã°ãããŸãã
ã©ãããã°ããããããã°ã§ããŸããïŒ ã¢ã¯ã·ã§ã³ã®ãã£ã¹ããããmapStateToPropsãèµ·åããªãããã«èŠããçç±ãç解ããã«ã¯ãäœãããå¿ èŠããããŸããïŒ
https://github.com/theaqua/redux-loggerã®ãããªããã«ãŠã§ã¢ãè¿œå ãmapStateToProps
ãåŒã³åºãããªãå Žåã¯ã
dispatch()
ããã®ãå¿ããŠãã¢ã¯ã·ã§ã³ã¯ãªãšãŒã¿ãŒãšåŒãã ã ãã§ããconnect()
ã¯ããããmapStateToProps()
åŒã³åºããªãã£ãããããã®ã±ãŒã¹ã¯äž¡æ¹ãšãhttp://redux.js.org/docs/Troubleshooting.htmlã§èª¬æãããŠã
å°æ¥çã«ã¯ãæåã«StackOverflowã§è³ªåããã©ã€ãã©ãªã«ãã°ããããå ±æã§ããäŸã§äžè²«ããŠåçŸã§ãããšç¢ºä¿¡ã§ããå Žåã¯ã課é¡è¿œè·¡ã·ã¹ãã ã䜿çšããããã«ããŠãã ããã
ããããšãïŒ
é çªã«çããïŒ
{ users : {}, posts : {}, comments : {}, ui : {} }
ã http://redux.js.org/docs/FAQ.html#reducers-share-stateããã³http://redux.js.org/docs/FAQ.html#organizing-state-nested-dataãåç
§ããŠãã ãããcombineReducers
ãŠãŒãã£ãªãã£ã䜿çšãããšã次ã®ãããªç¹å®ã®ããŒã¿ã¹ã©ã€ã¹ã®æŽæ°ã管çããç¹å®ã®ã¬ãã¥ãŒãµãŒé¢æ°ãç°¡åã«äœæã§ããŸãã const combinedReducer = combineReducers({users : userReducer, posts : postReducer, comments : commentsReducer, ui : uiReducer});
connect()
é¢æ°ã¯ãµãã¹ã¯ã©ã€ãããã³ã³ããŒãã³ãã®mapStateToProps
ãåŒã³åºããŠãæœåºãããããŒã¿ã®ãããããååããå€æŽãããŠãããã©ããã確èªããŸãã ç¹å®ã®ãã¹ããããç¶æ
ã®ãµãã¹ã¯ãªãã·ã§ã³ã¯ãããŸããã http://redux.js.org/docs/FAQ.html#store-setup-subscriptionsãåç
§ããŠãã ãããããŸãããã°ãããã¯ç©äºãçä»ããã®ã«åœ¹ç«ã¡ãŸãã
ãããè¶ ããŠããã³ãèšã£ãããã«ïŒäœ¿çšæ³ã®è³ªåã¯äžè¬çã«ã¹ã¿ãã¯ãªãŒããŒãããŒã«é©ããŠããŸãã ãŸããDiscordã®Reactifluxã³ãã¥ããã£ã«ã¯ãReduxãå«ãReacté¢é£ã®ãã¯ãããžãŒå°çšã®ãã£ãããã£ãã«ãããããããã質åã«çãã人ãåžžã«ããããããŸãã https://www.reactiflux.comã«æåŸ ãªã³ã¯ããã
@ richb-hanoverãããããreact-reduxæ¥ç¶ã«ãã£ãŠå®è¡ãããæµ ãæ¯èŒãç®æããããšã§ãããã ã€ãŸããä»ã®ãªããžã§ã¯ãå ã«ãã¹ãããããªããžã§ã¯ãã¯ãã«ãŒãããŒã®ã¿ãå€æŽããã§ãã¯ããããããå€æŽãããŠãåã¬ã³ããªã³ã°ãããŸããã
http://redux.js.org/docs/faq/ReactRedux.html#why -isnt-my-component-re-rendering-or-my-mapstatetoprops-running
@ richb-ãããŒããŒã¯ãç§ã®å Žåã@gaearonã¯ãåé¡ãæ€åºããŸããã
ãŸãã¯ãã¬ãã¥ãŒãµãŒãåç §çã«åäžã®å€ãè¿ãããããconnectïŒïŒã¯mapStateToPropsïŒïŒãããããåŒã³åºããªãã£ãã
ç§ã¯ãã®ä¿®æ£ã䜿çš
const mapStateToProps = (state, props) => {
return { id: props.id, currentState: state[props.id] };
}
const mapDispatchToProps = (dispatch) => {
return {
increment: (id) => {
dispatch({ type: 'INCREMENT', id: id })
}
}
}
const DumbListItem = ({
increment,
id,
currentState
}) => (
<div>
<li onClick={() => increment()}>{id}</li>
<span>{currentState}</span>
</div>
);
export const ConnectedListItem = connect(
mapStateToProps,
mapDispatchToProps
)(DumbListItem);
id
ãã©ã¡ãŒã¿ãŒãã€ã³ã¯ãªã¡ã³ãåŒã³åºãã«æž¡ããªãã£ãããïŒãã³ãã¬ãŒãã®increment(id)
ãšããŠããŸãã¯mapDispatchToProps
ã®2çªç®ã®ãã©ã¡ãŒã¿ãŒãä»ããŠïŒãã¹ãã¢ã¯æž¡ããŸããã§ãããæ£ããæŽæ°ããã®ã§ããããããããããªãã®åé¡ã§ãããã©ããã確èªããŠãã ããã
æãåèã«ãªãã³ã¡ã³ã
http://redux.js.org/docs/Troubleshooting.htmlã«ç®ãéããã±ãŒã¹ã説æãããŠããåé¡ã®1ã€ã§ã¯ãªãããšã確èªããŸãããïŒ
ããã Storeã¯ãæäžäœã®ç¶æ ãªããžã§ã¯ããå éšçã«ä¿æããŸãã
store.getState()
ãããã®ãªããžã§ã¯ããžã®ã¢ã¯ã»ã¹ãæäŸããŸãã ãã®ãªããžã§ã¯ãã¯ãã«ãŒãã¬ãã¥ãŒãµãŒããè¿ããããã®ãã¹ãŠã«å¯Ÿå¿ããå€ãã®å ŽåãããªãŒã®ãããªãã®ã§ããããããèªåäœæã¯ãããŸããã ã¹ãã¢ã¯ãã«ãŒãã¬ãã¥ãŒãµãŒãåŒã³åºããçµæããã€ã³ããå§ããŸãã
ã«ãŒãã¬ãã¥ãŒãµãŒãèªåã§äœæããé¢æ°ã§ããå Žåããã®çµæã¯ãã¢ã¯ã·ã§ã³ããã£ã¹ãããããåŸã«åŸããããã®ã§ãã
combineReducers({ foo, bar })
ãããªãã®ã§ã«ãŒãã¬ãã¥ãŒãµãŒã_çæ_ããå Žåã次ã®ããã«æåã§ã«ãŒãã¬ãã¥ãŒãµãŒãäœæããå Žåãšåãã§ããããã¯ãå·ã®ããããã£ããã°ãã°ç±æ¥ãããšããã§ãã ãããã®å€ã¯ãã¢ã¯ã·ã§ã³ã®åŠçäžã«ãããã
foo
ããã³bar
ã¬ãã¥ãŒãµãŒãè¿ããã®ã«ãã£ãŠæ±ºå®ããããããããããå®å šã«å¶åŸ¡ã§ããŸããmapStateToProps
ãconnect()
é¢æ°ã«æž¡ããŸããstore.subscribe()
ã䜿çšããŠãã¹ãã¢ãžã®ãã¹ãŠã®å€æŽããªãã¹ã³ããã³ã³ããŒãã³ããçæããŸãã ã¹ãã¢ãå€æŽããããšãçæãããã³ã³ããŒãã³ãã¯store.getState()
ãèªã¿åãããããmapStateToProps()
ã«æž¡ããŠã次ã«æž¡ãããå°éå ·ã決å®ããŸãã ããããå€æŽãããå Žåãã³ã³ããŒãã³ããããããšãšãã«åã¬ã³ããªã³ã°ãããŸããhttps://github.com/theaqua/redux-loggerã®ãããªããã«ãŠã§ã¢ãè¿œå ã
mapStateToProps
ãåŒã³åºãããªãå Žåã¯ãdispatch()
ããã®ãå¿ããŠãã¢ã¯ã·ã§ã³ã¯ãªãšãŒã¿ãŒãšåŒãã ã ãã§ããconnect()
ã¯ããããmapStateToProps()
åŒã³åºããªãã£ãããããã®ã±ãŒã¹ã¯äž¡æ¹ãšãhttp://redux.js.org/docs/Troubleshooting.htmlã§èª¬æãããŠã
å°æ¥çã«ã¯ãæåã«StackOverflowã§è³ªåããã©ã€ãã©ãªã«ãã°ããããå ±æã§ããäŸã§äžè²«ããŠåçŸã§ãããšç¢ºä¿¡ã§ããå Žåã¯ã課é¡è¿œè·¡ã·ã¹ãã ã䜿çšããããã«ããŠãã ããã
ããããšãïŒ