- μλ² μΊμ
- μλ²μ μ μ₯λμ΄ μλ μ 보μ΄λ©°, μ΄λ₯Ό λΉ λ₯΄κ² μ¬μ©μμκ² λ³΄μ¬μ£ΌκΈ° μν΄μ ν΄λΌμ΄μΈνΈ μ¬μ΄λμ μνλ‘μ μΊμ±ν΄λλλ€.
- λ§€λ² λ°±μλλ‘ μμ²μ 보λ΄λ λμ , λ°±μλμ νλ‘ νΈμλ μ¬μ΄μ μΊμλΌλ λ μ΄μ΄λ₯Ό λμ΄μ μ±λ₯μ λ¬Έμ λ₯Ό ν΄κ²°νλ κ².
- UI μν
- νλ‘ νΈμλμλ§ μ μ₯λμ΄μλ μν.
- νμ΄μ§ μλ‘κ³ μΉ¨μ λͺ¨λ μ¬λΌμ§λ μν.
μ΄ λκ°μ§ μνλ λ€λ₯΄κ² μ²λ¦¬λμ΄μΌ νλ€. μλ² μΊμλ 리μ‘νΈ μΏΌλ¦¬, 리μ½μΌ κ°μ μνκ΄λ¦¬ λΌμ΄λΈλ¬λ¦¬μμ νΈλ€λ§νκ³ , 리μ‘νΈμμλ UI μνλ§ λ€λ£¨λλ‘ νμ.
- λͺ¨λ κ±Έ μ μμΌλ‘ λλ€λ©΄ κ²°κ΅ App (μ΅μμμ»΄ν¬λνΈ)μμ κ΄λ¦¬νλκ² κΈ°νκΈμμ μΌλ‘ λ μ λ°μ μλ€. (Prop Drilling)
- κ·Έλ¬λ©΄ μ΄λ»κ² ν΄κ²°ν΄μΌν κΉ?
function App() {
const [someState, setSomeState] = React.useState("some state");
return (
<>
<Header
logo={<Logo someState={someState} />}
settings={<Settings onStateChange={setSomeState} />}
/>
<LeftNav>
<SomeLink someState={someState} />
<SomeOtherLink someState={someState} />
<Etc someState={someState} />
</LeftNav>
{/* ... */}
</>
);
}
λ§μ½β¦ν©μ±μ΄ μΆ©λΆνμ§ μλ€λ©΄ Context λ₯Ό μ¬μ©νμΈμ©
ν©μ± κ΄λ ¨ μμ YouTube
Context api κ΄λ ¨ κΈ How to use React Context effectively
const CountContext = React.createContext()
function Counter() {
const {count, increment} = React.useContext(CountContext)
return <button onClick={onIncrementClick}>{count}</button>
}
function CountDisplay() {
const {count} = React.useContext(CountContext)
return <div>The current counter count is {count}</div>
}
function App() {
const [count, setCount] = React.useState(0)
const increment = () => setCount(c => c + 1)
return (
<CountContext.Provider value={{count, increment}}>
<div>
<CountDisplay />
<Counter />
</div>
</CountContext.Provider>
)
- κΈλ‘λ²μ λͺ¨λ μνλ₯Ό λλλ€λ©΄β¦
function App() {
return (
<UserProvider username={username}>
<NotificationsProvider>
<ThemeProvider>
<AuthenticationProvider>
<Router>
<HomeScreen path="/" />
<AboutScreen path="/about" />
<UserScreen path="/:userId" />
<UserSettingsScreen path="/settings" />
<NotificationsScreen path="/notifications" />
</Router>
</AuthenticationProvider>
</ThemeProvider>
</NotificationsProvider>
</UserProvider>
);
}
- μμ κ°μ μ»΄ν¬λνΈ κ΅¬μ‘°λΌλ©΄ μλμ κ°μ νμΌ κ΅¬μ‘°λ₯Ό κ°κ²λλ€.
my-cool-app
βββ src
βββ index.js
βββ providers
βΒ Β βββ auth.js
βΒ Β βββ notifications.js
βΒ Β βββ theme.js
βΒ Β βββ user.js
βΒ Β βββ ...etc
βββ screens
βΒ Β βββ about.js
βΒ Β βββ home.js
βΒ Β βββ notifications
βΒ Β βΒ Β βββ index.js
βΒ Β βΒ Β βββ list.js
βΒ Β βΒ Β βββ tab.js
βΒ Β βΒ Β βββ type-list.js
βΒ Β βββ settings.js
βΒ Β βββ user
βΒ Β βββ activity.js
βΒ Β βββ index.js
βΒ Β βββ info.js
βΒ Β βββ nav.js
βββ utils
βββ ...etc
-
λ¬Έμ μ : Notification Provider λ notification μ»΄ν¬λνΈμμλ§ μ°λλ° ν΄λΉ λ‘μ§μ μμ νκΈ° μν΄μλ κ° ν΄λλ₯Ό λλ°κΈ° ν΄μΌν¨β¦
-
λ¬Έμ μ 2: μλ°μ€ν¬λ¦½νΈ νμΌμ λ‘λ ν λ.. μ¬μ©μμκ² Notification μ»΄ν¬λνΈκ° 보μ΄κΈ° μ μ΄λ Setting μ»΄ν¬λνΈκ° 보μ΄κΈ°λ μ μ provider κ΄λ ¨ μ½λκ° λ‘λλλ©΄μ λΆνμν λ‘λ©μ΄ μ겨λ²λ¦°λ€. -> μ½λ μ€νλ¦Ών λΆκ°λ₯
κ·Έλμ μλμ κ°μ΄ colocate νμ!
function App() {
return (
<ThemeProvider>
<AuthenticationProvider>
<Router>
<HomeScreen path="/" />
<AboutScreen path="/about" />
<UserScreen path="/:userId" />
<UserSettingsScreen path="/settings" />
<NotificationsScreen path="/notifications" />
</Router>
</AuthenticationProvider>
</ThemeProvider>
);
}
function NotificationsScreen() {
return (
<NotificationsProvider>
<NotificationsTab />
<NotificationsTypeList />
<NotificationsList />
</NotificationsProvider>
);
}
function UserScreen({ username }) {
return (
<UserProvider username={username}>
<UserInfo />
<UserNav />
<UserActivity />
</UserProvider>
);
}
my-cooler-app
βββ src
βββ index.js
βββ providers
βΒ Β βββ auth.js
βΒ Β βββ theme.js
βΒ Β βββ ...etc
βββ screens
βΒ Β βββ about.js
βΒ Β βββ home.js
βΒ Β βββ notifications
βΒ Β βΒ Β βββ index.js
βΒ Β βΒ Β βββ list.js
βΒ Β βΒ Β βββ provider.js
βΒ Β βΒ Β βββ tab.js
βΒ Β βΒ Β βββ type-list.js
βΒ Β βββ settings.js
βΒ Β βββ user
βΒ Β βββ activity.js
βΒ Β βββ index.js
βΒ Β βββ info.js
βΒ Β βββ nav.js
βΒ Β βββ provider.js
βββ utils
βββ ...etc