Reactã«ã¹ã¿ã ããã¯éã§ç¶æ ãåæããããã¯ããã¯ãæ¢æ±ããè€éãªã¢ããªã±ãŒã·ã§ã³ã§ã®ã·ãŒã ã¬ã¹ãªã³ã³ããŒãã³ãéä¿¡ãšããŒã¿ã®æŽåæ§ãå®çŸããŸãã
Reactã«ã¹ã¿ã ããã¯ã®ç¶æ åæïŒããã¯ã®ç¶æ 飿ºã®å®çŸ
Reactã«ã¹ã¿ã ããã¯ã¯ãã³ã³ããŒãã³ãããåå©çšå¯èœãªããžãã¯ãæœåºããããã®åŒ·åãªæ¹æ³ã§ããããããè€æ°ã®ããã¯ãç¶æ
ãå
±æãŸãã¯é£æºããå¿
èŠãããå Žåãè€éã«ãªãå¯èœæ§ããããŸãããã®èšäºã§ã¯ãReactã«ã¹ã¿ã ããã¯éã§ç¶æ
ãåæãããããã®ããŸããŸãªãã¯ããã¯ãæ¢æ±ããè€éãªã¢ããªã±ãŒã·ã§ã³ã§ã®ã·ãŒã ã¬ã¹ãªã³ã³ããŒãã³ãéä¿¡ãšããŒã¿ã®æŽåæ§ãå®çŸããŸããåçŽãªå
±æç¶æ
ãããuseContextãuseReducerã䜿çšããããé«åºŠãªãã¯ããã¯ãŸã§ãããŸããŸãªã¢ãããŒããã«ããŒããŸãã
ãªãã«ã¹ã¿ã ããã¯éã§ç¶æ ãåæãããã®ãïŒ
ã©ã®ããã«ããããæãäžããåã«ãã«ã¹ã¿ã ããã¯éã§ç¶æ ãåæãããå¿ èŠãããçç±ãçè§£ããŸããããæ¬¡ã®ã·ããªãªãèããŠã¿ãŸãããã
- å ±æããŒã¿ïŒ è€æ°ã®ã³ã³ããŒãã³ããåãããŒã¿ã«ã¢ã¯ã»ã¹ããå¿ èŠãããã1ã€ã®ã³ã³ããŒãã³ãã§è¡ããã倿Žãä»ã®ã³ã³ããŒãã³ãã«åæ ãããå¿ èŠããããŸããããšãã°ãã¢ããªã±ãŒã·ã§ã³ã®ããŸããŸãªéšåã«è¡šç€ºããããŠãŒã¶ãŒã®ãããã£ãŒã«æ å ±ãªã©ã§ãã
- 飿ºã¢ã¯ã·ã§ã³ïŒ 1ã€ã®ããã¯ã®ã¢ã¯ã·ã§ã³ããå¥ã®ããã¯ã®ç¶æ ã®æŽæ°ãããªã¬ãŒããå¿ èŠããããŸããã¢ã€ãã ã远å ãããšãã«ãŒãã®å 容ãšãéæãèšç®ããå¥ã®ããã¯ã®äž¡æ¹ãæŽæ°ãããã·ã§ããã³ã°ã«ãŒããæ³åããŠãã ããã
- UIå¶åŸ¡ïŒ ç°ãªãã³ã³ããŒãã³ãéã§ãã¢ãŒãã«ã®è¡šç€ºãªã©ãå ±æUIã®ç¶æ ã管çããŸãã1ã€ã®ã³ã³ããŒãã³ãã§ã¢ãŒãã«ãéããšãä»ã®ã³ã³ããŒãã³ãã§èªåçã«éããããããã«ããå¿ èŠããããŸãã
- ãã©ãŒã 管çïŒ ç°ãªãã»ã¯ã·ã§ã³ãåå¥ã®ããã¯ã«ãã£ãŠç®¡çãããå šäœçãªãã©ãŒã ã®ç¶æ ãæŽåãããå¿ èŠãããè€éãªãã©ãŒã ãåŠçããŸããããã¯ãè€æ°ã¹ãããã®ãã©ãŒã ã§ããèŠãããŸãã
é©åãªåæããªããšãã¢ããªã±ãŒã·ã§ã³ã¯ããŒã¿ã®äžæŽåãäºæããªãåäœãããã³è²§åŒ±ãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã«æ©ãŸãããå¯èœæ§ããããŸãããããã£ãŠãç¶æ 飿ºãçè§£ããããšã¯ãå ç¢ã§ä¿å®æ§ã®é«ãReactã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã«äžå¯æ¬ ã§ãã
ããã¯ã®ç¶æ 飿ºã®ããã®ãã¯ããã¯
ã«ã¹ã¿ã ããã¯éã§ç¶æ ãåæãããããã«ãããã€ãã®ãã¯ããã¯ãæ¡çšã§ããŸããã¡ãœããã®éžæã¯ãç¶æ ã®è€éããšããã¯éã®å¿ èŠãªçµåã®ã¬ãã«ã«ãã£ãŠç°ãªããŸãã
1. React Contextã䜿çšããå ±æç¶æ
useContextããã¯ã䜿çšãããšãã³ã³ããŒãã³ãã¯Reactã³ã³ããã¹ãããµãã¹ã¯ã©ã€ãã§ããŸããããã¯ãã«ã¹ã¿ã ããã¯ãå«ãã³ã³ããŒãã³ãããªãŒå
šäœã§ç¶æ
ãå
±æããããã®åªããæ¹æ³ã§ããã³ã³ããã¹ããäœæãããããã€ããŒã䜿çšããŠãã®å€ãæäŸããããšã«ãããè€æ°ã®ããã¯ãåãç¶æ
ã«ã¢ã¯ã»ã¹ããŠæŽæ°ã§ããŸãã
äŸïŒããŒã管ç
React Contextã䜿çšããŠãã·ã³ãã«ãªããŒã管çã·ã¹ãã ãäœæããŠã¿ãŸããããããã¯ãè€æ°ã®ã³ã³ããŒãã³ããçŸåšã®ããŒãïŒã©ã€ããŸãã¯ããŒã¯ïŒã«åå¿ããå¿ èŠãããäžè¬çãªãŠãŒã¹ã±ãŒã¹ã§ãã
import React, { createContext, useContext, useState } from 'react';
// ããŒãã³ã³ããã¹ããäœæãã
const ThemeContext = createContext();
// ããŒããããã€ããŒã³ã³ããŒãã³ããäœæãã
const ThemeProvider = ({ children }) => {
const [theme, setTheme] = useState('light');
const toggleTheme = () => {
setTheme((prevTheme) => (prevTheme === 'light' ? 'dark' : 'light'));
};
const value = {
theme,
toggleTheme,
};
return (
{children}
);
};
// ããŒãã³ã³ããã¹ãã«ã¢ã¯ã»ã¹ããããã®ã«ã¹ã¿ã ããã¯
const useTheme = () => {
const context = useContext(ThemeContext);
if (!context) {
throw new Error('useThemeã¯ThemeProviderå
ã§äœ¿çšããå¿
èŠããããŸã');
}
return context;
};
export { ThemeProvider, useTheme };
説æïŒ
ThemeContextïŒ ããã¯ãããŒãã®ç¶æ ãšæŽæ°é¢æ°ãä¿æããã³ã³ããã¹ããªããžã§ã¯ãã§ããThemeProviderïŒ ãã®ã³ã³ããŒãã³ãã¯ãåã«ããŒãã®ç¶æ ãæäŸããŸããuseStateã䜿çšããŠããŒãã管çããtoggleTheme颿°ãå ¬éããŸããThemeContext.Providerã®valueããããã¯ãããŒããšåãæ¿ã颿°ãå«ããªããžã§ã¯ãã§ããuseThemeïŒ ãã®ã«ã¹ã¿ã ããã¯ã䜿çšãããšãã³ã³ããŒãã³ãã¯ããŒãã³ã³ããã¹ãã«ã¢ã¯ã»ã¹ã§ããŸããuseContextã䜿çšããŠã³ã³ããã¹ãããµãã¹ã¯ã©ã€ãããããŒããšåãæ¿ã颿°ãè¿ããŸãã
䜿çšäŸïŒ
import React from 'react';
import { ThemeProvider, useTheme } from './ThemeContext';
const MyComponent = () => {
const { theme, toggleTheme } = useTheme();
return (
çŸåšã®ããŒãïŒ{theme}
);
};
const AnotherComponent = () => {
const { theme } = useTheme();
return (
çŸåšã®ããŒããïŒ{theme}
);
};
const App = () => {
return (
);
};
export default App;
ãã®äŸã§ã¯ãMyComponentãšAnotherComponentã®äž¡æ¹ãuseThemeããã¯ã䜿çšããŠãåãããŒãã®ç¶æ
ã«ã¢ã¯ã»ã¹ããŠããŸããMyComponentã§ããŒããåãæ¿ãããšãAnotherComponentã¯èªåçã«æŽæ°ããããã®å€æŽãåæ ãããŸãã
Contextã䜿çšããå©ç¹ïŒ
- ç°¡åãªå ±æïŒ ã³ã³ããŒãã³ãããªãŒå šäœã§ç¶æ ãç°¡åã«å ±æã§ããŸãã
- éäžåç¶æ ïŒ ç¶æ ã¯1ã€ã®å ŽæïŒãããã€ããŒã³ã³ããŒãã³ãïŒã§ç®¡çãããŸãã
- èªåæŽæ°ïŒ ã³ã³ããã¹ãã®å€ã倿Žããããšãã³ã³ããŒãã³ãã¯èªåçã«åã¬ã³ããªã³ã°ãããŸãã
Contextã䜿çšããæ¬ ç¹ïŒ
- ããã©ãŒãã³ã¹ã«é¢ããæžå¿µäºé ïŒ ã³ã³ããã¹ãã«ãµãã¹ã¯ã©ã€ãããŠãããã¹ãŠã®ã³ã³ããŒãã³ãã¯ãã³ã³ããã¹ãã®å€ã倿Žããããšåã¬ã³ããªã³ã°ãããŸããããã¯ã倿Žãããç¹å®ã®éšåã䜿çšããŠããªããŠãåæ§ã§ããããã¯ãã¡ã¢åãªã©ã®ãã¯ããã¯ã§æé©åã§ããŸãã
- å¯çµåïŒ ã³ã³ããŒãã³ãã¯ã³ã³ããã¹ãã«å¯çµåã«ãªããããŸããŸãªã³ã³ããã¹ãã§ãã¹ãããŠåå©çšããããšãé£ãããªãå¯èœæ§ããããŸãã
- Context HellïŒ ã³ã³ããã¹ãã䜿ãããããšããããããããªãªã³ã°ããšåæ§ã«ãè€éã§ç®¡çãé£ããã³ã³ããŒãã³ãããªãŒã«ã€ãªããå¯èœæ§ããããŸãã
2. SingletonãšããŠã®ã«ã¹ã¿ã ããã¯ã䜿çšããå ±æç¶æ
ããã¯é¢æ°ã®å€éšã§ç¶æ ãå®çŸ©ããããã¯ã®ã€ã³ã¹ã¿ã³ã¹ã1ã€ã ãäœæãããããã«ããããšã§ãsingletonãšããŠæ©èœããã«ã¹ã¿ã ããã¯ãäœæã§ããŸããããã¯ãã°ããŒãã«ãªã¢ããªã±ãŒã·ã§ã³ç¶æ ã管çããã®ã«åœ¹ç«ã¡ãŸãã
äŸïŒã«ãŠã³ã¿ãŒ
import { useState } from 'react';
let count = 0; // ç¶æ
ã¯ããã¯ã®å€éšã§å®çŸ©ãããŸã
const useCounter = () => {
const [, setCount] = useState(count); // åã¬ã³ããªã³ã°ã匷å¶ããŸã
const increment = () => {
count++;
setCount(count);
};
const decrement = () => {
count--;
setCount(count);
};
return {
count,
increment,
decrement,
};
};
export default useCounter;
説æïŒ
countïŒ ã«ãŠã³ã¿ãŒã®ç¶æ ã¯useCounter颿°ã®å€éšã§å®çŸ©ãããŠãããããã°ããŒãã«å€æ°ã«ãªããŸããuseCounterïŒ ããã¯ã¯ãäž»ã«ã°ããŒãã«ãªcount倿°ã倿Žããããšãã«åã¬ã³ããªã³ã°ãããªã¬ãŒããããã«useStateã䜿çšããŸããå®éã®ç¶æ ã®å€ã¯ãããã¯å ã«æ ŒçŽãããŠããŸãããincrementãšdecrementïŒ ãããã®é¢æ°ã¯ãã°ããŒãã«ãªcount倿°ã倿ŽããŠããsetCountãåŒã³åºããŠãããã¯ã䜿çšããŠãããã¹ãŠã®ã³ã³ããŒãã³ãã«åã¬ã³ããªã³ã°ã匷å¶ããæŽæ°ãããå€ã衚瀺ããŸãã
䜿çšäŸïŒ
import React from 'react';
import useCounter from './useCounter';
const ComponentA = () => {
const { count, increment } = useCounter();
return (
ã³ã³ããŒãã³ãAïŒ{count}
);
};
const ComponentB = () => {
const { count, decrement } = useCounter();
return (
ã³ã³ããŒãã³ãBïŒ{count}
);
};
const App = () => {
return (
);
};
export default App;
ãã®äŸã§ã¯ãComponentAãšComponentBã®äž¡æ¹ãuseCounterããã¯ã䜿çšããŠããŸããã«ãŠã³ã¿ãŒãComponentAã§ã€ã³ã¯ãªã¡ã³ãããããšãComponentBã¯èªåçã«æŽæ°ããããã®å€æŽãåæ ãããŸããããã¯ãäž¡æ¹ãåãã°ããŒãã«ãªcount倿°ã䜿çšããŠããããã§ãã
Singleton Hookã䜿çšããå©ç¹ïŒ
- ç°¡åãªå®è£ ïŒ ç°¡åãªç¶æ å ±æã«ã€ããŠã¯ãæ¯èŒçç°¡åã«å®è£ ã§ããŸãã
- ã°ããŒãã«ã¢ã¯ã»ã¹ïŒ å ±æç¶æ ã®åäžã®ä¿¡é Œã§ããæ å ±æºãæäŸããŸãã
Singleton Hookã䜿çšããæ¬ ç¹ïŒ
- ã°ããŒãã«ç¶æ ã®åé¡ïŒ ã³ã³ããŒãã³ãã®å¯çµåã«ã€ãªãããç¹ã«å€§èŠæš¡ãªã¢ããªã±ãŒã·ã§ã³ã§ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ç¶æ ãæšæž¬ããããšãå°é£ã«ãªããŸããã°ããŒãã«ç¶æ ã®ç®¡çãšãããã°ãé£ãããªãå¯èœæ§ããããŸãã
- ãã¹ãã®èª²é¡ïŒ ã°ããŒãã«ç¶æ ã«äŸåããã³ã³ããŒãã³ãã®ãã¹ãã¯ãã°ããŒãã«ç¶æ ãé©åã«åæåãããåãã¹ãåŸã«ã¯ãªãŒã³ã¢ãããããããã«ããå¿ èŠããããããããè€éã«ãªãå¯èœæ§ããããŸãã
- å¶åŸ¡ã®å¶éïŒ React ContextãŸãã¯ãã®ä»ã®ç¶æ 管çãœãªã¥ãŒã·ã§ã³ã䜿çšããå Žåãšæ¯èŒããŠãã³ã³ããŒãã³ããåã¬ã³ããªã³ã°ãããã¿ã€ãã³ã°ã𿹿³ã®å¶åŸ¡ãå°ãªããªããŸãã
- ãã°ã®å¯èœæ§ïŒ ç¶æ ãReactã®ã©ã€ããµã€ã¯ã«å€ã«ãããããããè€éãªã·ããªãªã§äºæããªãåäœãçºçããå¯èœæ§ããããŸãã
3. è€éãªç¶æ
管çã®ããã®ContextãšuseReducerã®äœ¿çš
ããè€éãªç¶æ
管çã·ããªãªã§ã¯ãuseReducerãšuseContextãçµã¿åãããããšã§ã匷åã§æè»ãªãœãªã¥ãŒã·ã§ã³ãæäŸãããŸããuseReducerã䜿çšãããšãç¶æ
é·ç§»ãäºæž¬å¯èœãªæ¹æ³ã§ç®¡çã§ããuseContextã䜿çšãããšãã¢ããªã±ãŒã·ã§ã³å
šäœã§ç¶æ
ãšãã£ã¹ããã颿°ãå
±æã§ããŸãã
äŸïŒã·ã§ããã³ã°ã«ãŒã
import React, { createContext, useContext, useReducer } from 'react';
// åæç¶æ
const initialState = {
items: [],
total: 0,
};
// ãªãã¥ãŒãµãŒé¢æ°
const cartReducer = (state, action) => {
switch (action.type) {
case 'ADD_ITEM':
return {
...state,
items: [...state.items, action.payload],
total: state.total + action.payload.price,
};
case 'REMOVE_ITEM':
return {
...state,
items: state.items.filter((item) => item.id !== action.payload.id),
total: state.total - action.payload.price,
};
default:
return state;
}
};
// ã«ãŒãã³ã³ããã¹ããäœæãã
const CartContext = createContext();
// ã«ãŒããããã€ããŒã³ã³ããŒãã³ããäœæãã
const CartProvider = ({ children }) => {
const [state, dispatch] = useReducer(cartReducer, initialState);
return (
{children}
);
};
// ã«ãŒãã³ã³ããã¹ãã«ã¢ã¯ã»ã¹ããããã®ã«ã¹ã¿ã ããã¯
const useCart = () => {
const context = useContext(CartContext);
if (!context) {
throw new Error('useCartã¯CartProviderå
ã§äœ¿çšããå¿
èŠããããŸã');
}
return context;
};
export { CartProvider, useCart };
説æïŒ
initialStateïŒ ã·ã§ããã³ã°ã«ãŒãã®åæç¶æ ãå®çŸ©ããŸããcartReducerïŒ ããŸããŸãªã¢ã¯ã·ã§ã³ïŒADD_ITEMãREMOVE_ITEMïŒãåŠçããŠã«ãŒãã®ç¶æ ãæŽæ°ãããªãã¥ãŒãµãŒé¢æ°ãCartContextïŒ ã«ãŒãã®ç¶æ ãšãã£ã¹ããã颿°ã®ã³ã³ããã¹ããªããžã§ã¯ããCartProviderïŒuseReducerãšCartContext.Providerã䜿çšããŠãã«ãŒãã®ç¶æ ãšãã£ã¹ããã颿°ãåã«æäŸããŸããuseCartïŒ ã³ã³ããŒãã³ããã«ãŒãã³ã³ããã¹ãã«ã¢ã¯ã»ã¹ã§ããããã«ããã«ã¹ã¿ã ããã¯ã
䜿çšäŸïŒ
import React from 'react';
import { CartProvider, useCart } from './CartContext';
const ProductList = () => {
const { dispatch } = useCart();
const products = [
{ id: 1, name: 'ååA', price: 20 },
{ id: 2, name: 'ååB', price: 30 },
];
return (
{products.map((product) => (
{product.name} - ${product.price}
))}
);
};
const Cart = () => {
const { state } = useCart();
return (
ã«ãŒã
{state.items.length === 0 ? (
ã«ãŒãã¯ç©ºã§ãã
) : (
{state.items.map((item) => (
- {item.name} - ${item.price}
))}
)}
åèšïŒ${state.total}
);
};
const App = () => {
return (
);
};
export default App;
ãã®äŸã§ã¯ãProductListãšCartã®äž¡æ¹ãuseCartããã¯ã䜿çšããŠãã«ãŒãã®ç¶æ
ãšãã£ã¹ããã颿°ã«ã¢ã¯ã»ã¹ããŠããŸããProductListã§ã«ãŒãã«ã¢ã€ãã ã远å ãããšãã«ãŒãã®ç¶æ
ãæŽæ°ãããCartã³ã³ããŒãã³ãã¯èªåçã«åã¬ã³ããªã³ã°ãããæŽæ°ãããã«ãŒãã®å
容ãšåèšã衚瀺ãããŸãã
Contextã§useReducerã䜿çšããå©ç¹ïŒ
- äºæž¬å¯èœãªç¶æ
é·ç§»ïŒ
useReducerã¯äºæž¬å¯èœãªç¶æ 管çãã¿ãŒã³ã匷å¶ããè€éãªç¶æ ããžãã¯ã®ãããã°ãšä¿å®ã容æã«ããŸãã - éäžåç¶æ 管çïŒ ç¶æ ãšæŽæ°ããžãã¯ã¯ãªãã¥ãŒãµãŒé¢æ°ã«éäžåãããŠãããçè§£ãšå€æŽã容æã«ãªããŸãã
- ã¹ã±ãŒã©ããªãã£ïŒ è€æ°ã®é¢é£ããå€ãšé·ç§»ãå«ãè€éãªç¶æ ã®ç®¡çã«æé©ã§ãã
Contextã§useReducerã䜿çšããæ¬ ç¹ïŒ
- è€éãã®å¢å ïŒ
useStateã䜿çšããåçŽãªãã¯ããã¯ãšæ¯èŒããŠãã»ããã¢ãããããè€éã«ãªãå¯èœæ§ããããŸãã - ãã€ã©ãŒãã¬ãŒãã³ãŒãïŒ ã¢ã¯ã·ã§ã³ããªãã¥ãŒãµãŒé¢æ°ãããã³ãããã€ããŒã³ã³ããŒãã³ããå®çŸ©ããå¿ èŠããããããå€ãã®ãã€ã©ãŒãã¬ãŒãã³ãŒããçºçããå¯èœæ§ããããŸãã
4. Prop Drillingãšã³ãŒã«ããã¯é¢æ°ïŒå¯èœãªå Žåã¯é¿ããïŒ
çŽæ¥çãªç¶æ åæãã¯ããã¯ã§ã¯ãããŸããããããããããªãªã³ã°ãšã³ãŒã«ããã¯é¢æ°ã䜿çšããŠãã³ã³ããŒãã³ããšããã¯éã§ç¶æ ãšæŽæ°é¢æ°ãæž¡ãããšãã§ããŸãããã ãããã®ã¢ãããŒãã¯ãã³ãŒãã®ä¿å®ãé£ãããªãå¯èœæ§ããããããè€éãªã¢ããªã±ãŒã·ã§ã³ã§ã¯äžè¬çã«æšå¥šãããŠããŸããã
äŸïŒã¢ãŒãã«ã®è¡šç€º
import React, { useState } from 'react';
const Modal = ({ isOpen, onClose }) => {
if (!isOpen) {
return null;
}
return (
ãããã¢ãŒãã«ã®å
容ã§ãã
);
};
const ParentComponent = () => {
const [isModalOpen, setIsModalOpen] = useState(false);
const openModal = () => {
setIsModalOpen(true);
};
const closeModal = () => {
setIsModalOpen(false);
};
return (
);
};
export default ParentComponent;
説æïŒ
ParentComponentïŒisModalOpenã®ç¶æ ã管çããopenModal颿°ãšcloseModal颿°ãæäŸããŸããModalïŒisOpenã®ç¶æ ãšonClose颿°ããããããšããŠåãåããŸãã
Prop Drillingã®æ¬ ç¹ïŒ
- ã³ãŒãã®ç ©éãïŒ ç¹ã«è€æ°ã®ã¬ãã«ã®ã³ã³ããŒãã³ããä»ããŠãããããæž¡ãå Žåãåé·ã§èªã¿ãããã³ãŒãã«ã€ãªããå¯èœæ§ããããŸãã
- ä¿å®ã®é£ããïŒ ç¶æ ãŸãã¯æŽæ°é¢æ°ãžã®å€æŽãè€æ°ã®ã³ã³ããŒãã³ãã§ã®å€æŽãå¿ èŠãšãããããã³ãŒãã®ãªãã¡ã¯ã¿ãªã³ã°ãšä¿å®ãå°é£ã«ãªããŸãã
- ããã©ãŒãã³ã¹ã®åé¡ïŒ å®éã«æž¡ãããããããã䜿çšããªãäžéã³ã³ããŒãã³ãã®äžèŠãªåã¬ã³ããªã³ã°ãåŒãèµ·ããå¯èœæ§ããããŸãã
æšå¥šäºé ïŒ è€éãªç¶æ 管çã·ããªãªã§ã¯ãããããããªãªã³ã°ãšã³ãŒã«ããã¯é¢æ°ãé¿ããŠãã ããã代ããã«ãReact ContextãŸãã¯å°çšã®ç¶æ 管çã©ã€ãã©ãªã䜿çšããŠãã ããã
é©åãªãã¯ããã¯ã®éžæ
ã«ã¹ã¿ã ããã¯éã§ç¶æ ãåæããããã®æé©ãªãã¯ããã¯ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ç¹å®ã®èŠä»¶ã«ãã£ãŠç°ãªããŸãã
- åçŽãªå
±æç¶æ
ïŒ ããã€ãã®ã³ã³ããŒãã³ãéã§åçŽãªç¶æ
å€ãå
±æããå¿
èŠãããå Žåã¯ã
useStateã䜿çšããReact Contextãé©ããŠããŸãã - ã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³ç¶æ ïŒæ³šæïŒïŒ Singletonã«ã¹ã¿ã ããã¯ã¯ãã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³ç¶æ ã®ç®¡çã«äœ¿çšã§ããŸãããæœåšçãªæ¬ ç¹ïŒå¯çµåããã¹ãã®èª²é¡ïŒã«æ³šæããŠãã ããã
- è€éãªç¶æ
管çïŒ ããè€éãªç¶æ
管çã·ããªãªã®å Žåã¯ãReact Contextã§
useReducerã䜿çšããããšãæ€èšããŠãã ããããã®ã¢ãããŒãã¯ãç¶æ é·ç§»ã管çããããã®äºæž¬å¯èœã§ã¹ã±ãŒã©ãã«ãªæ¹æ³ãæäŸããŸãã - Prop Drillingãé¿ããïŒ è€éãªç¶æ 管çã§ã¯ãããããããªãªã³ã°ãšã³ãŒã«ããã¯é¢æ°ã¯é¿ããå¿ èŠããããŸãããããã¯ãã³ãŒãã®ç ©éããšä¿å®ã®é£ããã«ã€ãªããå¯èœæ§ããããŸãã
ããã¯ã®ç¶æ 飿ºã«é¢ãããã¹ããã©ã¯ãã£ã¹
- ããã¯ãçŠç¹ã«åãããïŒ ç¹å®ã®ã¿ã¹ã¯ãŸãã¯ããŒã¿ãã¡ã€ã³ãæ åœããããã«ããã¯ãèšèšããŸããé床ã«è€éãªç¶æ ã管çãããè€éãããããã¯ã®äœæã¯é¿ããŠãã ããã
- ããããããååã䜿çšããïŒ ããã¯ãšç¶æ 倿°ã«ã¯ãæç¢ºã§ããããããååã䜿çšããŠãã ãããããã«ãããããã¯ã®ç®çãšç®¡çããããŒã¿ãçè§£ãããããªããŸãã
- ããã¯ãææžåããïŒ ããã¯ã管çããç¶æ ãå®è¡ããã¢ã¯ã·ã§ã³ãäŸåé¢ä¿ã«é¢ããæ å ±ãªã©ãããã¯ã«é¢ããæç¢ºãªããã¥ã¡ã³ããæäŸããŸãã
- ããã¯ããã¹ãããïŒ ããã¯ãæ£ããæ©èœããŠããããšã確èªããããã«ãããã¯ã®åäœãã¹ããäœæããŸããããã«ãããæ©æã«ãã°ããã£ããããååž°ã鲿¢ããã®ã«åœ¹ç«ã¡ãŸãã
- ç¶æ 管çã©ã€ãã©ãªãæ€èšããïŒ å€§èŠæš¡ã§è€éãªã¢ããªã±ãŒã·ã§ã³ã®å Žåã¯ãReduxãZustandãJotaiãªã©ã®å°çšã®ç¶æ 管çã©ã€ãã©ãªã®äœ¿çšãæ€èšããŠãã ããããããã®ã©ã€ãã©ãªã¯ãã¢ããªã±ãŒã·ã§ã³ã®ç¶æ ã管çããããã®ããé«åºŠãªæ©èœãæäŸããäžè¬çãªèœãšã穎ãåé¿ããã®ã«åœ¹ç«ã¡ãŸãã
- æ§æãåªå ããïŒ å¯èœãªå Žåã¯ãè€éãªããžãã¯ãããå°ãããæ§æå¯èœãªããã¯ã«åå²ããŸããããã«ãããã³ãŒãã®åå©çšãä¿é²ãããä¿å®æ§ãåäžããŸãã
é«åºŠãªèæ ®äºé
- ã¡ã¢åïŒ
React.memoãuseMemoãããã³useCallbackã䜿çšããŠãäžèŠãªåã¬ã³ããªã³ã°ãé²ããããã©ãŒãã³ã¹ãæé©åããŸãã - ãããŠã³ã¹ãšã¹ããããªã³ã°ïŒ ãŠãŒã¶ãŒå ¥åãŸãã¯ãããã¯ãŒã¯ãªã¯ãšã¹ããåŠçããå Žåã«ãç¶æ æŽæ°ã®é »åºŠãå¶åŸ¡ããããã«ããããŠã³ã¹ãšã¹ããããªã³ã°ã®ãã¯ããã¯ãå®è£ ããŸãã
- ãšã©ãŒåŠçïŒ ããã¯ã§é©åãªãšã©ãŒåŠçãå®è£ ããŠãäºæããªãã¯ã©ãã·ã¥ãé²ãããŠãŒã¶ãŒã«æçãªãšã©ãŒã¡ãã»ãŒãžãæäŸããŸãã
- éåææäœïŒ éåææäœãåŠçããå Žåã¯ãé©åãªäŸåé¢ä¿é
åã䜿çšããŠ
useEffectã䜿çšããå¿ èŠã«å¿ããŠã®ã¿ããã¯ãå®è¡ãããããã«ããŸããuse-async-hookã®ãããªã©ã€ãã©ãªã䜿çšããŠãéåæããžãã¯ãç°¡çŽ åããããšãæ€èšããŠãã ããã
çµè«
Reactã«ã¹ã¿ã ããã¯éã®ç¶æ ã®åæã¯ãå ç¢ã§ä¿å®æ§ã®é«ãã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã«äžå¯æ¬ ã§ãããã®èšäºã§æŠèª¬ãããŠããããŸããŸãªãã¯ããã¯ãšãã¹ããã©ã¯ãã£ã¹ãçè§£ããããšã«ãããç¶æ 飿ºã广çã«ç®¡çããã·ãŒã ã¬ã¹ãªã³ã³ããŒãã³ãéä¿¡ãäœæã§ããŸããç¹å®ã®èŠä»¶ã«æé©ãªãã¯ããã¯ãéžæããã³ãŒãã®æçããä¿å®æ§ãããã³ãã¹ãå¯èœæ§ãåªå ããããšãå¿ããªãã§ãã ãããå°ããªå人ãããžã§ã¯ããæ§ç¯ããå Žåã§ããå€§èŠæš¡ãªãšã³ã¿ãŒãã©ã€ãºã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããå Žåã§ããããã¯ã®ç¶æ åæãç¿åŸããããšã§ãReactã³ãŒãã®å質ãšã¹ã±ãŒã©ããªãã£ãå€§å¹ ã«åäžããŸãã