TL; DR
ContextãšReduxã¯åãã§ããïŒ
çªå·ããããã¯ç°ãªãããšãè¡ãç°ãªãããŒã«ã§ãããç°ãªãç®çã§äœ¿çšãããŸãã
ã³ã³ããã¹ãã¯ãç¶æ 管çãã®ããŒã«ã§ããïŒ
çªå·ãã³ã³ããã¹ãã¯ãäŸåæ§æ³šå ¥ã®äžåœ¢æ ã§ããäœãå¶åŸ¡ããªããã©ã³ã¹ããŒãã¡ã«ããºã ã§ãããç¶æ 管çãã¯æåã§è¡ãããéåžžã¯useStateïŒïŒ/ useReducerïŒïŒããã¯ã䜿çšããŸãã
ContextãšuseReducerïŒïŒã¯Reduxã®ä»£ããã«ãªããŸããïŒ
çªå·ããããã¯ããé¡äŒŒããŠãããéšåçã«éè€ããŠããŸãããæ©èœã®ç¹ã§å€§ããç°ãªããŸãã
ãã€ã³ã³ããã¹ãã䜿çšããå¿ èŠããããŸããïŒ
äžéšã®ããŒã¿ãè€æ°ã®ã³ã³ããŒãã³ãã§äœ¿çšã§ããããã«ããããããã®ããŒã¿ãã³ã³ããŒãã³ãããªãŒã®ãã¹ãŠã®ã¬ãã«ã§å°éå ·ãšããŠæž¡ããããªãå Žåã
ãã€ContextãšuseReducerïŒïŒã䜿çšããå¿ èŠããããŸããïŒ
ã¢ããªã±ãŒã·ã§ã³ã®ç¹å®ã®éšåã§é©åºŠã«è€éãªã³ã³ããŒãã³ãã®ç¶æ ã管çããå¿ èŠãããå Žåã
ãã€Reduxã䜿ãã¹ãã§ããïŒ
Reduxã¯æ¬¡ã®å Žåã«æã圹ç«ã¡ãŸãã
- åãããŒã¿ã䜿çšããå€æ°ã®ã¹ããŒããã«ã³ã³ããŒãã³ã
- ã¢ããªã®ã¹ããŒã¿ã¹ã¯é »ç¹ã«æŽæ°ãããŸã
- ç¶æ ãæŽæ°ããããã®è€éãªããžãã¯
- ã¢ããªã±ãŒã·ã§ã³ã«ã¯äžèŠæš¡ãã倧èŠæš¡ã®ã³ãŒãããŒã¹ããããå€ãã®äººãããã«åãçµãã§ããŸã
- ã¢ããªã±ãŒã·ã§ã³ã®ç¶æ ããã€ããªããã©ã®ããã«æŽæ°ãããããç¥ãããããã®å€æŽãèŠèŠåã§ããããã«ããã
- å¯äœçšãå®å®æ§ïŒæ°žç¶æ§ïŒãããã³ããŒã¿ã®ã·ãªã¢ã«åãåŠçããã«ã¯ããã匷åãªæ©èœãå¿ èŠã§ã
ã³ã³ããã¹ããšReduxãç解ãã
ããŒã«ãæ£ãã䜿çšããã«ã¯ã次ã®ããšãç解ããããšãéèŠã§ãã
- ããã¯ãªãã®ããã§ãã
- ããã¯ã©ã®ãããªã¿ã¹ã¯ã解決ããŸãã
- ãã€ããªãäœæãããã®ã
ãŸããã¢ããªã±ãŒã·ã§ã³ã§è§£æ±ºããããšããŠããåé¡ãç解ããããããæããã解決ããããŒã«ã䜿çšããããšãéèŠã§ãã誰ãããããã䜿çšããããã«æ瀺ããããã§ã¯ãªãã人æ°ãããããã§ã¯ãªããç¹å®ã®ç¶æ³ã
ContextãšReduxã«é¢ããæ··ä¹±ã¯ãäž»ã«ããããã®ããŒã«ã®ç®çãšè§£æ±ºããã¿ã¹ã¯ã«ã€ããŠã®èª€è§£ã«ãããã®ã§ãããããã£ãŠããã€äœ¿çšãã¹ããã話ãåã«ãããããäœã§ãããããããŠããããã©ã®ãããªåé¡ã解決ãããã決å®ããå¿ èŠããããŸãã
ã³ã³ããã¹ããšã¯äœã§ããïŒ
å ¬åŒããã¥ã¡ã³ãããã³ã³ããã¹ããå®çŸ©ããããšããå§ããŸããã ã
ãã³ã³ããã¹ãã«ãããäžéã¬ãã«ã§å°éå ·ãæž¡ãããšãªããããŒã¿ãã³ã³ããŒãã³ãããªãŒã«æž¡ãããšãã§ããŸãã
å žåçãªReactã¢ããªã±ãŒã·ã§ã³ã§ã¯ãããŒã¿ã¯å°éå ·ã䜿çšããŠäžããäžã«ïŒèŠªããåã«ïŒæž¡ãããŸãããã ãããã®æ¹æ³ã¯ãã¢ããªã±ãŒã·ã§ã³ã®å€ãã®ã³ã³ããŒãã³ãã«æž¡ãå¿ èŠãããäžéšã®ã¿ã€ãã®å°éå ·ïŒããšãã°ãéžæããèšèªãã€ã³ã¿ãŒãã§ã€ã¹ããŒãïŒã§ã¯ããéãã«ãªãå¯èœæ§ããããŸããã³ã³ããã¹ãã¯ãã³ã³ããŒãã³ãããªãŒã®åã¬ãã«ã§å°éå ·ãæ瀺çã«æž¡ãããšãªãããã®ãããªããŒã¿ãã³ã³ããŒãã³ãéã§åæ£ããæ¹æ³ãæäŸããŸããã
ãã®å®çŸ©ã¯ã管çãã«ã€ããŠã®èšèã§ã¯ãªããã転éããšãé åžãã«ã€ããŠã®ã¿è¿°ã¹ãŠããããšã«æ³šæããŠãã ããã
çŸåšã®ã³ã³ããã¹ãAPIïŒReact.createContextïŒïŒïŒã¯ã以åã®ããŒãžã§ã³ã®Reactã§å©çšå¯èœãªã¬ã¬ã·ãŒAPIã®ä»£ãããšããŠãReact 16.3ã§æåã«å°å ¥ãããŸããããããã€ãã®èšèšäžã®æ¬ é¥ããããŸããäž»ãªåé¡ã®1ã€ã¯ãã³ã³ããŒãã³ããshouldComponentUpdateïŒïŒã«ããã¬ã³ããªã³ã°ãã¹ãããããå Žåãã³ã³ããã¹ããä»ããŠæž¡ãããå€ã®æŽæ°ãããããã¯ããããå¯èœæ§ãããããšã§ãããå€ãã®ã³ã³ããŒãã³ããæé©åã®ç®çã§shouldComponentUpdateïŒïŒã«é Œã£ãŠãããããã³ã³ããã¹ããä»ããŠããŒã¿ãæž¡ãããšã¯åœ¹ã«ç«ããªããªããŸãããcreateContextïŒïŒã¯ãã®åé¡ã«å¯ŸåŠããããã«èšèšãããŠãããããäžéã³ã³ããŒãã³ããã¬ã³ããªã³ã°ãã¹ãããããå Žåã§ããå€ã®æŽæ°ã¯åã³ã³ããŒãã³ãã«åæ ãããŸãã
ã³ã³ããã¹ãã®äœ¿çš
ã¢ããªã±ãŒã·ã§ã³ã§ã³ã³ããã¹ãã䜿çšããããšã¯ã次ã®ããšãåæãšããŠããŸãã
- const MyContext = React.createContextïŒïŒãåŒã³åºããŠãã³ã³ããã¹ããªããžã§ã¯ããã€ã³ã¹ã¿ã³ã¹åããŸã
- 芪ã³ã³ããŒãã³ãã§ãrenderïŒltMyContext.Provider value = {someValue}>ãããã«ãããäžéšã®ããŒã¿ãã³ã³ããã¹ãã«çµã¿èŸŒãŸããŸãããã®ããŒã¿ã¯ãæååãæ°å€ããªããžã§ã¯ããé åãã¯ã©ã¹ã€ã³ã¹ã¿ã³ã¹ãã€ãã³ããã³ãã©ãŒãªã©ãäœã§ãããŸããŸããã
- const theContextValue = useContextïŒMyContextïŒãåŒã³åºããŠããããã€ããŒå ã®ä»»æã®ã³ã³ããŒãã³ãã®ã³ã³ããã¹ãå€ãååŸããŸã
芪ã³ã³ããŒãã³ããæŽæ°ãããæ°ããåç §ããããã€ããŒå€ãšããŠæž¡ããããšãã³ã³ããã¹ãããæ¶è²»ãããã³ã³ããŒãã³ãã¯åŒ·å¶çã«æŽæ°ãããŸãã
éåžžãã³ã³ããã¹ãå€ã¯ã³ã³ããŒãã³ãã®ç¶æ ã§ãã
import { createContext } from 'react'
export const MyContext = createContext()
export function ParentComponent({ children }) {
const [counter, setCounter] = useState(0)
return (
<MyContext.Provider value={[counter, setCounter]}>
{children}
</MyContext.Provider>
)
}
次ã«ãåã³ã³ããŒãã³ãã¯useContextïŒïŒããã¯ãåŒã³åºããŠãã³ã³ããã¹ãå€ãèªã¿åãããšãã§ããŸãã
import { useContext } from 'react'
import { MyContext } from './MyContext'
export function NestedChildComponent() {
const [counter, setCounter] = useContext(MyContext)
// ...
}
ã³ã³ããã¹ããå®éã«ã¯äœãå¶åŸ¡ããŠããªãããšãããããŸãã代ããã«ãããã¯äžçš®ã®ãã€ãã§ãã <MyContext.Provider>ã䜿çšããŠãã³ãã«ã®å é ïŒäžéšïŒã«ããŒã¿ãé 眮ãããšãã³ã³ããŒãã³ããuseContextïŒMyContextïŒã䜿çšããŠããŒã¿ãèŠæ±ãããŸã§ããã®ããŒã¿ã¯ããŒã«ããŠã³ãããŸãã
ãããã£ãŠãã³ã³ããã¹ãã®äž»ãªç®çã¯ãæ¯æ±ã®ç©Žãããé²ãããšã§ããã³ã³ããŒãã³ãããªãŒã®ãã¹ãŠã®ã¬ãã«ã§ããŒã¿ãå°éå ·ãšããŠæž¡ã代ããã«ã<MyContext.Provider>ã«ãã¹ããããã³ã³ããŒãã³ãã¯ãuseContextïŒMyContextïŒãä»ããŠããŒã¿ã«ã¢ã¯ã»ã¹ã§ããŸããããã«ãããå°éå ·ã®åãæž¡ãããžãã¯ãå®è£ ããããã®ã³ãŒããèšè¿°ããå¿ èŠããªããªããŸãã
æŠå¿µçã«ã¯ãããã¯äŸåæ§æ³šå ¥ã®äžåœ¢æ ã§ã..ãåäŸãç¹å®ã®ã¿ã€ãã®ããŒã¿ãå¿ èŠãšããŠããããšã¯ããã£ãŠããŸããããã®ããŒã¿ãèªåã§äœæãŸãã¯èšå®ããããšã¯ããŠããŸããã代ããã«ãå®è¡æã«ãã®ããŒã¿ãæž¡ãããã«ãããã€ãã®ç¥å ã«äŸåããŠããŸãã
Reduxãšã¯äœã§ããïŒ
Redux Basicsã®å®çŸ©ã¯æ¬¡ã®ãšãã ã§ãã
ãReduxã¯ãæäœãšåŒã°ããã€ãã³ãã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ã®ç¶æ ã管çããã³æŽæ°ããããã®ãã¶ã€ã³ãã¿ãŒã³ããã³ã©ã€ãã©ãªã§ããReduxã¯ãäºæž¬å¯èœãªç¶æ ã®æŽæ°ãä¿èšŒããã«ãŒã«ã«åŸã£ãŠãã¢ããªã±ãŒã·ã§ã³ç¶æ ã®éäžãªããžããªãšããŠæ©èœããŸãã
Reduxã䜿çšãããšããã°ããŒãã«ãç¶æ ïŒã¢ããªã±ãŒã·ã§ã³ã®è€æ°ã®éšåã«ãã€ããããç¶æ ïŒã管çã§ããŸãã
ReduxãæäŸãããã¿ãŒã³ãšããŒã«ã«ãããç¶æ ãã©ãã§ããã€ããªããã©ã®ããã«æŽæ°ãããããããã³ã¢ããªã±ãŒã·ã§ã³ããã®å€æŽã«ã©ã®ããã«å¿çããããç°¡åã«å€æã§ããŸããã
ãã®èª¬æã¯æ¬¡ã®ããšã瀺ããŠããããšã«æ³šæããŠãã ããã
- ç¶æ 管ç
- Reduxã®ç®çã¯ãç¶æ ã®å€åãçºçããçç±ãšæ¹æ³ãç¹å®ããããšã§ãã
Reduxã¯å ã ãReactããªãªãŒã¹ãããŠãã1幎åŸã®2014幎ã«Facebookã«ãã£ãŠéçºããããã¶ã€ã³ãã¿ãŒã³ã§ãããFluxarchitectureãã®å®è£ ã§ãã ãFluxã®ç»å Žä»¥æ¥ãã³ãã¥ããã£ã¯ãã®æŠå¿µãããŸããŸãªæ¹æ³ã§å®è£ ããå€ãã®ã©ã€ãã©ãªãéçºããŠããŸãããReduxã¯2015幎ã«ç»å Žãããã®ææ ®æ·±ããã¶ã€ã³ãäžè¬çãªåé¡ã®è§£æ±ºãReactãšã®åªããäºææ§ã®ãããã§ãããã«ãã®ã³ã³ãã¹ãã®åªåè ã«ãªããŸããã
ã¢ãŒããã¯ãã£äžãReduxã¯é¢æ°åããã°ã©ãã³ã°ã®ååã匷調ããŠäœ¿çšããŠããŸããããã«ãããäºæž¬å¯èœãªãã¬ãã¥ãŒãµãŒãã®åœ¢åŒã§ã³ãŒããèšè¿°ãããäœãèµ·ãã£ãã®ãããšããæŠå¿µãããããçºçãããšãã«ç¶æ ãã©ã®ããã«æŽæ°ããããããå®çŸ©ããããžãã¯ããåé¢ã§ããŸããã€ãã³ããçºçããŸãããReduxã¯ãå¯äœçšã®åŠçãªã©ãã¹ãã¢ã®æ©èœãæ¡åŒµããæ¹æ³ãšããŠããã«ãŠã§ã¢ã䜿çšã ãŸãã
Reduxã¯ãæäœã®å±¥æŽãšæéã®çµéã«äŒŽãç¶æ ã®å€åã調æ»ããããã®éçºè ããŒã«ãæäŸ ããŸãã
ReduxãšReact
Reduxèªäœã¯UIããç¬ç«ããŠãããä»»æã®ãã¥ãŒã¬ã€ã€ãŒïŒReactãVueãAngularãvanilla JSãªã©ïŒã§äœ¿çšããããšããUIããŸã£ãã䜿çšããªãããšãã§ããŸãã
ãã ããã»ãšãã©ã®å ŽåãReduxã¯Reactãšçµã¿åãããŠäœ¿çšââãããŸããReact Reduxã©ã€ãã©ãª ã¯ãReactã³ã³ããŒãã³ããReduxç¶æ ããå€ãååŸããŠæäœãéå§ããããšã«ãããReduxã¹ãã¢ãšå¯Ÿè©±ã§ããããã«ããå ¬åŒã®UIãã€ã³ãã£ã³ã°ã¬ã€ã€ãŒã§ãã React-Reduxã¯å éšçã«ã³ã³ããã¹ãã䜿çšããŸãããã ããReact-Reduxã¯ãçŸåšã®ç¶æ å€ã§ã¯ãªããReduxã¹ãã¢ã€ã³ã¹ã¿ã³ã¹ã®ã³ã³ããã¹ããééããããšã«æ³šæããŠãã ãã ãããã¯ãäŸåæ§æ³šå ¥ã«ã³ã³ããã¹ãã䜿çšããäŸã§ããReduxã«æ¥ç¶ãããã³ã³ããŒãã³ããReduxã¹ãã¢ãšå¯Ÿè©±ããå¿ èŠãããããšã¯ããã£ãŠããŸãããã³ã³ããŒãã³ããå®çŸ©ãããšãã«ãã®ã¹ãã¢ãäœã§ãããã¯ããããŸãããå®éã®Reduxã¹ãã¢ã¯ãReact-ReduxãæäŸãã<Provider>ã³ã³ããŒãã³ãã䜿çšããŠãå®è¡æã«ããªãŒã«æ¿å ¥ãããŸãã
ãããã£ãŠãReact-Reduxã䜿çšããŠããããªã«ããé²æ¢ããããšãã§ããŸãïŒã³ã³ããã¹ãã®å éšäœ¿çšã«ããïŒã<MyContext.Provider>ãä»ããŠæ°ããå€ãæ瀺çã«æž¡ã代ããã«ããã®ããŒã¿ãReduxã¹ãã¢ã«å ¥ããŠãç®çã®ã³ã³ããŒãã³ãã§ååŸã§ããŸãã
ïŒReact-ïŒReduxã®ç®çãšãŠãŒã¹ã±ãŒã¹
å ¬åŒããã¥ã¡ã³ãã«ãããšãReduxã®äž»ãªç®çã¯æ¬¡ã®ãšããã§ãã
ãReduxãæäŸãããã¿ãŒã³ãšããŒã«ã«ãããç¶æ ã®å€åããã€ãã©ãã§ããªããã©ã®ããã«çºçããã¢ããªã±ãŒã·ã§ã³ãããã«ã©ã®ããã«åå¿ããããç°¡åã«ç解ã§ããŸããã
Reduxã䜿çšããçç±ã¯ä»ã«ãããã€ããããŸãããããã®çç±ã®1ã€ã¯ããç©Žããããé²ãããã§ãã
ãã®ä»ã®äœ¿çšäŸïŒ
- ç¶æ 管çããžãã¯ãšUIã¬ã€ã€ãŒã®å®å šãªåé¢
- ç°ãªãUIã¬ã€ã€ãŒéã§ã®ç¶æ 管çããžãã¯ã®åæ£ïŒããšãã°ãã¢ããªã±ãŒã·ã§ã³ãAngularJSããReactã«å€æããããã»ã¹ïŒ
- Reduxããã«ãŠã§ã¢ã䜿çšããŠæäœãåæåãããšãã«ããžãã¯ãè¿œå ãã
- Reduxç¶æ ã®äžéšãä¿åããæ©èœ
- ä»ã®éçºè ãåçŸã§ãããã°ã¬ããŒããåä¿¡ããæ©èœ
- éçºäžã«ããžãã¯ãšUIããã°ãããããã°ããæ©èœ
Dan Abramovã¯ã2016幎ã®èšäºããªãReduxãå¿ èŠãªãã®ããã«ãããã®ã±ãŒã¹ããªã¹ãããŸãã ã
ã³ã³ããã¹ãããç¶æ 管çãã®ããŒã«ã§ã¯ãªãã®ã¯ãªãã§ããïŒ
ç¶æ ã¯ãã¢ããªã±ãŒã·ã§ã³ã®åäœã説æããããŒã¿ã§ããå¿ èŠã«å¿ããŠãç¶æ ããµãŒããŒç¶æ ãéä¿¡ç¶æ ãããŒã«ã«ç¶æ ãªã©ã®ã«ããŽãªã«åé¡ã§ããŸãããéèŠãªåŽé¢ã¯ãããŒã¿ã®ä¿åãèªã¿åããæŽæ°ãããã³äœ¿çšã§ãã
XStateã©ã€ãã©ãªã®äœæè ã§ç¶æ 管çã®ã¹ãã·ã£ãªã¹ãã§ããDavidKhourshidã¯ããã€ãŒãã®1ã€ã§ã
ãç¶æ 管çãšã¯ãæéã®çµéãšãšãã«ç¶æ ãå€åãããããšã§ãããšè¿°ã¹ãŠããŸãã
ãããã£ãŠããç¶æ 管çããšã¯æ¬¡ã®ããšãæå³ããŸãã
- åæå€ã®ä¿å
- çŸåšã®å€ãååŸãã
- å€ã®æŽæ°
ãŸããéåžžãçŸåšã®ç¶æ å€ãå€æŽããããšãã«éç¥ãåãåãæ¹æ³ããããŸãã
Reactããã¯ã®useStateïŒïŒãšuseReducerïŒïŒã¯ãç¶æ 管çã®åªããäŸã§ãããããã®ããã¯ã䜿çšãããšã次ã®ããšãã§ããŸãã
- ããã¯ãåŒã³åºããŠåæå€ãä¿åãã
- ããã¯ãåŒã³åºããŠçŸåšã®å€ãååŸãã
- setStateïŒïŒãŸãã¯dispatchïŒïŒãããããåŒã³åºããŠãå€ãæŽæ°ããŸã
- ã³ã³ããŒãã³ããåã¬ã³ããªã³ã°ããŠãç¶æ ã®æŽæ°ã«æ³šæããŠãã ãã
ReduxãšMobXã§ã¯ãç¶æ ã管çããããšãã§ããŸãã
- Reduxã¯ã«ãŒãã¬ãã¥ãŒãµãŒãåŒã³åºãããšã§åæå€ãä¿åããstore.getStateïŒïŒã§çŸåšã®å€ãèªã¿åããstore.dispatchïŒã¢ã¯ã·ã§ã³ïŒã§å€ãæŽæ°ããstore.subscribeïŒãªã¹ããŒïŒãä»ããŠç¶æ æŽæ°éç¥ãåä¿¡ã§ããããã«ããŸã
- MobXã¯ãã¹ãã¬ãŒãžã¯ã©ã¹ãã£ãŒã«ãã«å€ãå²ãåœãŠãããšã§åæå€ãä¿æããã¹ãã¬ãŒãžãã£ãŒã«ããä»ããŠçŸåšã®å€ãèªã¿åã£ãŠæŽæ°ã§ããããã«ããautorunïŒïŒã¡ãœãããšcomputedïŒïŒã¡ãœããã䜿çšããŠç¶æ æŽæ°éç¥ãåä¿¡ããŸãã
ç¶æ 管çããŒã«ã«ã¯ãReact-QueryãSWRãApolloãUrqlãªã©ã®ãµãŒããŒãã£ãã·ã¥ããŒã«ãå«ãŸããŸã-ãã§ãããããããŒã¿ã«åºã¥ããŠåæå€ãä¿åããããã¯ã䜿çšããŠçŸåšã®å€ãè¿ããããµãŒããŒãã¥ãŒããŒã·ã§ã³ããä»ããŠå€ãæŽæ°ããéç¥ããããšãã§ããŸãã³ã³ããŒãã³ããåã¬ã³ããªã³ã°ããããšã«ããå€æŽã
ReactContextãæå®ãããåºæºãæºãããŠããŸããããããã£ãŠãããã¯ç¶æ 管çããŒã«ã§ã¯ãããŸãã
åè¿°ã®ããã«ãã³ã³ããã¹ãèªäœã¯äœãæ ŒçŽããŸããã<MyContext.Provider>ãã¬ã³ããªã³ã°ãã芪ã³ã³ããŒãã³ãã¯ãå€ãæž¡ã圹å²ãæãããŸããå€ã¯éåžžãã³ã³ããŒãã³ãã®ç¶æ ã«ãã£ãŠç°ãªããŸããå®éã®ãç¶æ 管çãã¯ãuseStateïŒïŒ/ useReducerïŒïŒããã¯ããååŸãããŸãã
David Khourshid
ã¯ã次ã®ããã«ãè¿°ã¹ãŠããŸãããã³ã³ããã¹ããšã¯ãæ¢åã®ç¶æ ãã³ã³ããŒãã³ãéã§å ±æãããæ¹æ³ã§ããã³ã³ããã¹ãã¯ç¶æ ãšã¯äœã®é¢ä¿ããããŸãããã
ãã㊠åŸã®ãã€ãŒãã§ã
ãã³ã³ããã¹ãã¯ãç¶æ ãæœè±¡åããé ãããå°éå ·ã®ãããªãã®ã ãšæããŸããã
ã³ã³ããã¹ããè¡ãããšã¯ãã¹ãŠããããªã«ããåé¿ããããšã§ãã
ã³ã³ããã¹ããšReduxã®æ¯èŒ
ã³ã³ããã¹ããšReact + Reduxã®æ©èœãæ¯èŒããŠã¿ãŸãããã
- ç°å¢
-
- äœãä¿åãããäœã管çããŸãã
- Reactã³ã³ããŒãã³ãã§ã®ã¿æ©èœããŸã
- åçŽãªïŒåäžã®ïŒå€ã®äžãééããŸããããã¯ãä»»æïŒããªããã£ãããªããžã§ã¯ããã¯ã©ã¹ãªã©ïŒã«ããããšãã§ããŸãã
- ãã®ç°¡åãªæå³ãèªã¿ãŸããã
- ãç©Žããããé²ãããã«äœ¿çšã§ããŸã
- éçºããŒã«ã®ãããã€ããŒã³ã³ããŒãã³ããšã³ã³ã·ã¥ãŒããŒã³ã³ããŒãã³ãã®çŸåšã®å€ã衚瀺ããŸããããã®å€ãžã®å€æŽã®å±¥æŽã¯è¡šç€ºããŸãã
- å€ãå€æŽããããšãã«æ¶è²»ã³ã³ããŒãã³ããæŽæ°ããŸãããæŽæ°ãã¹ãããããããšã¯ã§ããŸãã
- å¯äœçšãåŠçããããã®ã¡ã«ããºã ãæäŸããŸãã-ã¬ã³ããªã³ã°ã®ã¿ãæ åœããŸã
- React + Redux
-
- åçŽãªå€ïŒéåžžã¯ãªããžã§ã¯ãïŒãæ ŒçŽããã³ç®¡çããŸã
- Reactã³ã³ããŒãã³ãã®å€éšã ãã§ãªããä»»æã®UIã§åäœããŸã
- ãã®ç°¡åãªæå³ãèªã¿ãŸããã
- ãç©Žããããé²ãããã«äœ¿çšã§ããŸã
- æäœãåæåããã¬ãã¥ãŒãµãŒãå®è¡ããããšã§å€ãæŽæ°ã§ããŸã
- éçºè ããŒã«ã¯ãæäœã®åæåãšç¶æ å€æŽã®å±¥æŽã衚瀺ããŸã
- ããã«ãŠã§ã¢ã䜿çšããŠå¯äœçšãåŠçããæ©èœãæäŸããŸã
- ã³ã³ããŒãã³ããã¹ãã¢ã®æŽæ°ããµãã¹ã¯ã©ã€ãããã¹ãã¢ç¶æ ã®ç¹å®ã®éšåãååŸããã³ã³ããŒãã³ãã®åã¬ã³ããªã³ã°ãå¶åŸ¡ã§ããããã«ããŸã
æããã«ããããã¯ç°ãªãæ©èœãåããå®å šã«ç°ãªãããŒã«ã§ãããããã®éã®å¯äžã®äº€ç¹ã¯ããç©Žããããé²ãããšã§ãã
ã³ã³ããã¹ããšuseReducerïŒïŒ
ãContextvsReduxãã®è°è«ã®åé¡ã®1ã€ã¯ã人ã ãå®éã«ãuseReducerïŒïŒã䜿çšããŠç¶æ ãšã³ã³ããã¹ãã管çããå€ãæž¡ãããšããæå³ã§ããããšãå€ãããšã§ãããããã代ããã«ã圌ãã¯ãç§ã¯ã³ã³ããã¹ãã䜿çšããŠããŸãããšèšãã ãã§ããç§ã®æèŠã§ã¯ãããããæèããåœå®¶ãæ¯é ããŠããããšããç¥è©±ã®ç¶æã«å¯äžããæ··ä¹±ã®äž»ãªçç±ã§ãã
Context + useReducerïŒïŒã®çµã¿åãããæ€èšããŠãã ãããã¯ãããã®çµã¿åããã¯Redux + React-Reduxãšéåžžã«ãã䌌ãŠããŸãããããã®çµã¿åããã¯äž¡æ¹ãšã次ã®ãšããã§ãã
- ããªãã€ã
- ã¬ãã¥ãŒãµãŒæ©èœ
- æäœãåæåããæ©èœ
- å€ãæž¡ãããã¹ããããã³ã³ããŒãã³ãã§èªã¿åãæ©èœ
ãã ãããããã®éã«ã¯ãŸã ããã€ãã®éèŠãªéããããããããã®æ©èœãšåäœã«è¡šããŠããŸããç§ã¯ããããã®éããææããŠãã ããªã¢ã¯ãReduxã®ãããšã³ã³ããã¹ãè¡åãš ãªã¢ã¯ãã§ã®ã¬ã³ããªã³ã°ã«ïŒã»ãŒïŒå®å šã¬ã€ããèŠçŽãããšã次ã®ç¹ã«æ³šæããŠãã ããã
- Context + useReducerïŒïŒã¯ãçŸåšã®å€ãã³ã³ããã¹ãã«æž¡ãããšã«äŸåããŠããŸããReact-Reduxã¯çŸåšã®Reduxã¹ãã¢ã€ã³ã¹ã¿ã³ã¹ãã³ã³ããã¹ãã«æž¡ããŸã
- ã€ãŸããuseReducerïŒïŒãæ°ããå€ãçæãããšãäžéšã®ããŒã¿ã®ã¿ã䜿çšããŠããå Žåã§ããã³ã³ããã¹ãã«ãµãã¹ã¯ã©ã€ããããŠãããã¹ãŠã®ã³ã³ããŒãã³ãã匷å¶çã«åæç»ãããŸããããã«ãããç¶æ å€ã®ãµã€ãºã眲åãããã³ã³ããŒãã³ãã®æ°ãããã³åã¬ã³ããªã³ã°ã®é »åºŠã«ãã£ãŠã¯ãããã©ãŒãã³ã¹ã®åé¡ãçºçããå¯èœæ§ããããŸããReact-Reduxã䜿çšãããšãã³ã³ããŒãã³ãã¯ã¹ãã¢å€ã®ç¹å®ã®éšåããµãã¹ã¯ã©ã€ããããã®éšåãå€æŽãããå Žåã«ã®ã¿åæç»ã§ããŸã
ä»ã«ãéèŠãªéãããããŸãã
- Context + useReducerïŒïŒã¯Reactã®çµã¿èŸŒã¿æ©èœã§ããããã以å€ã§ã¯äœ¿çšã§ããŸãããReduxã¹ãã¢ã¯UIã«äŸåããªããããReactãšã¯å¥ã«äœ¿çšã§ããŸã
- React DevTools , . Redux DevTools , ( , type and payload),
- useReducer() middleware. useEffect() useReducer(), useReducer() middleware, Redux middleware
ããã§ã¯äœã§ãã ã»ãã¹ãã£ã³Markbageã¯ïŒã³ã¢ããŒã ã®ã¢ãŒããã¯ããšåå¿ïŒã³ã³ããã¹ãã䜿çšããŠã«ã€ããŠèªã£ãïŒ
ãç§ã®å人çãªæèŠã¯ãæ°ããªã³ã³ããã¹ããïŒäŸãã°ããŒã«ã©ã€ãºãããŒããªã©ïŒå¯èœæ§ã¯äœãäœåšæ³¢ã®æŽæ°ã®ããã«äœ¿çšããæºåãã§ããŠãããšããããšã§ãããŸããå€ãã³ã³ããã¹ãã䜿çšããããã¹ãŠã®å Žåã«äœ¿çšã§ããŸããéçãªå€ã®å Žåããµãã¹ã¯ãªãã·ã§ã³ã«ããæŽæ°ã®ãã®åŸã®é åžã Fluxã®ãããªå·ã®ãã£ã¹ããªãã¥ãŒã¿ãŒã®ä»£ãããšããŠäœ¿çšããæºåã¯ã§ããŠããŸãããã
ç¶æ ã®ããŸããŸãªéšåã«è€æ°ã®åå¥ã®ã³ã³ããã¹ããèšå®ããäžèŠãªåã¬ã³ããªã³ã°ãåé¿ããã¹ã³ãŒãã®åé¡ã解決ããããšãæšå¥šããWebäžã®èšäºã¯ãããããããŸããäžéšã®æçš¿ã§ã¯ãç¬èªã®ãã³ã³ããã¹ãã³ã³ããŒãã³ãããè¿œå ããããšãææ¡ãã ãŠããŸããããã«ã¯ãReact.memoïŒïŒãuseMemoïŒïŒã®çµã¿åãããå¿ èŠã§ãããã¢ããªã±ãŒã·ã§ã³ã®åéšåã§ã³ãŒãã2ã€ã®ã³ã³ããã¹ãã«é©å ã«åå²ããå¿ èŠããããŸãïŒ1ã€ã¯ããŒã¿çšããã1ã€ã¯æŽæ°æ©èœïŒããã¡ããããã®æ¹æ³ã§ã³ãŒããæžãããšãã§ããŸããããã®å ŽåãReact-ReduxãåçºæããŠããŸãã
ãããã£ãŠãContext + useReducerïŒïŒã¯æåã®æŠç®ã§Redux + React-Reduxã®è»œéãªä»£æ¿æ段ã§ããããããã®çµã¿åããã¯åäžã§ã¯ãããŸããããcontext + useReducerïŒïŒã¯Reduxãå®å šã«çœ®ãæããããšã¯ã§ããŸããïŒ
é©åãªããŒã«ã®éžæ
é©åãªããŒã«ãéžæããã«ã¯ãããŒã«ã解決ããã¿ã¹ã¯ãšãçŽé¢ããã¿ã¹ã¯ãç解ããããšãéåžžã«éèŠã§ãã
ãŠãŒã¹ã±ãŒã¹ã®æŠèŠ
- ç°å¢
- ãããªã«ããªãã§ãã¹ããããã³ã³ããŒãã³ãã«ããŒã¿ã転éãã
- useReducerïŒïŒ
- ã¬ãã¥ãŒãµãŒæ©èœã䜿çšããŠè€éãªã³ã³ããŒãã³ãã®ç¶æ ãå¶åŸ¡ãã
- ã³ã³ããã¹ã+ useReducerïŒïŒ
- ã¬ãã¥ãŒãµãŒé¢æ°ã䜿çšããŠè€éãªã³ã³ããŒãã³ãã®ç¶æ ã管çãããããªã«ãããã«ãã¹ããããã³ã³ããŒãã³ãã«ç¶æ ã転éããŸã
- æ»ã£ãŠãã
- ã¬ãã¥ãŒãµãŒæ©èœã§éåžžã«è€éãªç¶æ ãå¶åŸ¡ãã
- ç¶æ ãæéãšãšãã«å€åããææãçç±ãæ¹æ³ã®ãã¬ãŒãµããªãã£
- ç¶æ 管çããžãã¯ãUIã¬ã€ã€ãŒããå®å šã«åé¢ããã
- ç°ãªãUIã¬ã€ã€ãŒéã§ç¶æ 管çããžãã¯ãé åžãã
- ããã«ãŠã§ã¢ã®æ©èœã䜿çšããŠãæäœãåæåãããšãã«è¿œå ã®ããžãã¯ãå®è£ ãã
- ç¶æ ã®ç¹å®ã®éšåãä¿åããæ©èœ
- åçŸå¯èœãªãšã©ãŒã¬ããŒããååŸããæ©èœ
- éçºäžã«ããžãã¯ãšUIããã°ãããããã°ããæ©èœ
- Redux + React-Redux
- Reduxã®ãã¹ãŠã®ãŠãŒã¹ã±ãŒã¹+ Reactã³ã³ããŒãã³ããReduxã¹ãã¢ãšå¯Ÿè©±ããæ©èœ
ããäžåºŠïŒååä»ãããŒã«ã¯ããŸããŸãªåé¡ã解決ããŸãïŒ
æšå¥šäºé
ã§ã¯ãäœã䜿çšããããã©ã®ããã«æ±ºå®ããŸããïŒ
ãããè¡ãã«ã¯ãã¢ããªã±ãŒã·ã§ã³ã®åé¡ãæããã解決ããããŒã«ã決å®ããå¿ èŠããããŸãã
- ãããªã«ããé¿ãããã ãã®å Žåã¯ãã³ã³ããã¹ãã䜿çšããŠãã ãã
- , , + useReducer()
- , , .., Redux + React-Redux
ã¢ããªã±ãŒã·ã§ã³ã«ç¶æ ã管çããããã®2ã3ã®ã³ã³ããã¹ããããå Žåã¯ãReduxã«åãæ¿ããå¿ èŠããããšæããŸãã
ãReduxã䜿çšããã«ã¯å€ãã®å®åã³ãŒããæžãå¿ èŠãããããšããè³ã«ããŸããããææ°ã®Reduxãã䜿çšãããšãç¿åŸãšäœ¿çšãã¯ããã«ç°¡åã«ãªããŸããå ¬åŒã® ReduxToolkitã¯ãã³ãã¬ãŒãã®åé¡ã解決ããReact-Reduxãã㯠ã¯Reactã³ã³ããŒãã³ãã§Reduxãç°¡åã«äœ¿çšã§ããããã«ããŸãã
ãã¡ãããäŸåé¢ä¿ãšããŠRTKãšReact-Reduxãè¿œå ãããšãçµã¿èŸŒã¿ã®ã³ã³ããã¹ã+ useReducerïŒïŒãããã¢ããªã±ãŒã·ã§ã³ãã³ãã«ãå¢å ããŸãããããããã®ã¢ãããŒãã®å©ç¹ã¯ãæ¬ ç¹ãã«ããŒããŠããŸã-ããè¯ãç¶æ ãã¬ãŒã¹ãããåçŽã§ããäºæž¬å¯èœãªããžãã¯ãæ¹åãããã³ã³ããŒãã³ãã¬ã³ããªã³ã°ã®æé©åã
äžæ¹ãä»æ¹ãé€å€ããªãããšã«æ³šæããããšãéèŠã§ã-ReduxãContextãããã³useReducerïŒïŒãäžç·ã«äœ¿çšã§ããŸãããã°ããŒãã«ãç¶æ ãReduxã«ãããŒã«ã«ç¶æ ãã³ã³ããŒãã³ãã«ä¿åããããšããå§ã ããŸããã¢ããªã±ãŒã·ã§ã³ã®ã©ã®éšåãReduxã«ä¿åããã©ã®éšåãã³ã³ããŒãã³ãã«ä¿åãããã決å®ãããšãã¯æ³šæãå¿ èŠ ã§ãã..ããããã£ãŠãReduxã䜿çšããŠã°ããŒãã«ç¶æ ãä¿åããContext + useReducerïŒïŒã䜿çšããŠããŒã«ã«ç¶æ ãä¿åããContextã䜿çšããŠéçãªå€ããã¹ãŠåãã¢ããªã±ãŒã·ã§ã³ã«åæã«ä¿åã§ããŸãã
ç¹°ãè¿ãã«ãªããŸããããã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³ã®ç¶æ ãReduxã«ä¿åããå¿ èŠãããããŸãã¯Reduxãåžžã«æè¯ã®ãœãªã¥ãŒã·ã§ã³ã§ãããšäž»åŒµããŠããããã§ã¯ãããŸãããç§ã®ãã€ã³ãã¯ãReduxã¯è¯ãéžæã§ãããReduxã䜿çšããçç±ã¯ããããããã䜿çšæã¯å€ãã®äººãèããã»ã©é«ãã¯ãªããšããããšã§ãã
æåŸã«ãcontextãšReduxã¯ä»ã«é¡ãèŠãªããã®ã§ã¯ãããŸãããç¶æ 管çã®ä»ã®åŽé¢ã«å¯ŸåŠããä»ã®å€ãã®ããŒã«ããããŸããMobXã¯ãOOPãšãªãã¶ãŒããã«ã䜿çšããŠäŸåé¢ä¿ãèªåçã«æŽæ°ããäžè¬çãªãœãªã¥ãŒã·ã§ã³ã§ããå·ã®æŽæ°ã«å¯Ÿããä»ã®ã¢ãããŒãã«ã¯ãJotaiãRecoilãããã³Zustandãå«ãŸããŸããReact QueryãSWRãApolloãUrqlãªã©ã®ããŒã¿ã©ã€ãã©ãªã¯ããµãŒããŒãã£ãã·ã¥ç¶æ ãæäœããããã®äžè¬çãªãã¿ãŒã³ãç°¡åã«äœ¿çšã§ããããã«ããæœè±¡åãæäŸããŸãïŒåæ§ã®ã©ã€ãã©ãªïŒRTKã¯ãšãªïŒãRedux Toolkitã«ãŸããªã ç»å ŽããŸãïŒã
ãã®èšäºããã³ã³ããã¹ããšReduxã®éããããã³ã©ã®ããŒã«ããã€äœ¿çšãã¹ãããç解ããã®ã«åœ¹ç«ã€ããšãé¡ã£ãŠããŸããæž èŽããããšãããããŸããã