๋ฆฌ์กํธ๋ฅผ ๊ณต๋ถํ๋ค ๋ณด๋ฉด ์ด๋ ์๊ฐ ๋ฆฌ๋์ค์ ๋ํด์ ์์๋ณด์์ผ ํ๋ ์๊ธฐ๊ฐ ์จ๋ค.
๋์๊ฒ๋ ๋๋์ด ๊ทธ ์๊ธฐ๊ฐ ์๋ค!... ๐ง
๋ฆฌ๋์ค์ ๋ํด ๊น๊ณ ์ข์ ๊ธ๋ค์ ์ด๋ฏธ ์ถฉ๋ถํ ๋ง์ผ๋... ์์ง์ ์ด์ฌ์์ธ ๋์ ๊ด์ ์์ ๊ฐ๋ ์ ๊ฐ๋ณ๊ฒ ์ดํด๋ณด๊ธฐ๋ก~
(๊ณ ๋ก ์ด ๊ธ์ ์ด์ฌ์๋ค์๊ฒ ์ ํฉ)
Redux and Context API
๋ฆฌ๋์ค๋ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๊ณ ์๋ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค.
์ปดํฌ๋ํธ์ ์ํ ์ ๋ฐ์ดํธ ๋ก์ง์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๊ณ , ์ํ๋ฅผ ๊ณต์ ํ๋ ๋ฐฉ๋ฒ๋ ํจ์ฌ ํธํ๊ฒ ์ ๋ฌํ ์ ์๋ค.
์๋ง ๋ฆฌ๋์ค๋ฅผ ์ฒ์ ์ ํ๋ ์ฌ๋๋ค์ด๋ผ๋ฉด ์ง๊ธ๊น์ง Context API๋ฅผ ์จ์์ ๊ฒ์ด๋ค. (๋ ๋ํ...)
React.createContext
๋ฉ์๋๋ฅผ ํตํด์ ์ปจํ
์คํธ๋ฅผ ๋ง๋ค์ด์ ์ ๊ณต๋๋ Provider๋ฅผ ํตํด์ ๊ฐ์ ๊ณต์ ํ๋ ํํ๋ก ๋ง์ด๋ค.
๋ฆฌ์กํธ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์์ ์ปดํฌ๋ํธ์ ์ํ๊ฐ ๋ณํ ๊ฒฝ์ฐ ํ์ ์ปดํฌ๋ํธ๋ ๋ชจ๋ ์ฌ๋ ๋๋ง ๋๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฅํ ํํ๋ค.
Context API์ ๋ฌธ์
๊ทธ๋ผ Context API๋ฅผ ๊ณ์ ์จ๋ ๋์ง ์๋?... ๐ค ์ถ์ ์ ์๊ฒ ๋ค.
๊ฐ์ธ์ ์ผ๋ก ํ๋ ํ ์ด ํ๋ก์ ํธ๋, ์์ ํ๋ก์ ํธ์ ๊ฒฝ์ฐ์๋ ์ ์ฐ์ด์ง๋ง-
๋ฐ๋๋ก ๊ท๋ชจ๊ฐ ํฐ ํ๋ก์ ํธ์ผ ๊ฒฝ์ฐ, Context API๊ฐ ์ด๋ ๊ฒ ์์ฐฝ ์ค์ฒฉ๋๋ ๊ฒฝ์ฐ๊ฐ ์๊ธธ ์๋ ์๋ค.
์ด๋ ๊ฒ ์ค์ฒฉ๋๋ ๊ฒ์ ๋ฌผ๋ก ์ด๊ณ , Context API๋ ์ฆ์ ์ํ ๋ณ๊ฒฝ์ ํจ๊ณผ์ ์ด์ง ์๊ธฐ ๋๋ฌธ์, ์ผ๋ถ ์ฑ๋ฅ์ด ๋จ์ด์ง ์๋ ์๋ค.
์ด๋ฐ ์ด์ ๋ก ๋ฆฌ๋์ค๊ฐ ๋ ํจ์จ์ ์ผ๋ก ์ํ๊ด๋ฆฌ์ ์ฌ์ฉ๋๊ธฐ ์์!
Redux
๊ตฌ์กฐ ํ์ด๋ณด๊ธฐ
๋ฆฌ๋์ค ๊ณต์ ์ฌ์ดํธ์์ ๊ฐ์ ธ์๋ค.
์ gif์ ๊ณผ์ ์ ์ด๋ ๊ฒ ๋ถํดํด๋ณผ ์ ์๊ฒ ๋ค.
1. UI ์ปดํฌ๋ํธ์์ Deposit $10 ๋ฒํผ์ ํด๋ฆญ
2. ์ด๋ฒคํธ ํธ๋ค๋ฌ ๋ด๋ถ์ Dispatch ํจ์์์ Action ๊ฐ์ฒด๋ฅผ store๋ก ์ ๋ฌ
3. Store ๋ด๋ถ์ Reducer์์ Action ๊ฐ์ง, Action์ type์ ๋ฐ๋ฅธ ์์ ์ํ ํ ์๋ก์ด ์ํ๋ก ์ ๋ฐ์ดํธ
4. UI ์ปดํฌ๋ํธ์์ Store์ ์๋ก์ด ์ํ๋ก ์ ๋ฐ์ดํธ
๋จผ์ store๊ฐ ์๋ค. store๋ ๋ชจ๋ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ ํ๋์ ์ปค๋ค๋ ์ ์ฅ์์ด๋ฉฐ JSON ๊ฒฐ์ ์ฒด ๊ฐ์ ๋ ์์ด๋ค.
๊ทธ๋ฆฌ๊ณ ์ปดํฌ๋ํธ๋ store๋ฅผ ๊ตฌ๋ ํ๋ ํํ๋ค.
๊ตฌ๋ ํ๋ค๋ ๊ฒ์ด ๋ญ๊น ์ถ์ ์ ์๋๋ฐ, ๋ง ๊ทธ๋๋ก ์ ๋ฐ์ดํธ๋ ์ํ๋ฅผ store๋ก๋ถํฐ ๋ฐ์์์ ๋ณด์ฌ์ฃผ๊ธฐ๋ง ํ ๋ฟ,
์ปดํฌ๋ํธ๊ฐ ์ง์ ์ ์ผ๋ก ์ปจํธ๋กคํ์ง ์๋๋ค.
๊ทธ๋ผ ์ํ ์ ๋ฐ์ดํธ๋ ์ด๋ป๊ฒ?? ๐คทโ๏ธ
์ค์ง์ ์ผ๋ก ์ํ๋ฅผ ์ ๋ฐ์ดํธํ๋ ์ญํ - ์ฆ ์ด์ state์์ ์๋ก์ด state๋ฅผ ๋ง๋ค์ด ๋ด๋ ๋ ์์ Reducer๋ค.
์ ๊ตฌ์กฐ์์ ๋ณด๋ฉด, Dispatch๋ฅผ ํตํด ๋ฐํํ 'Action'์ด Reducer๋ฅผ ๊ฑฐ์น๋ฉฐ ์ด์ ์ํ์๋ 0์ด ์๋ก์ด ์ํ์ธ 10์ผ๋ก ์ ๋ฐ์ดํธ๋ ๊ฑธ ๋ณผ ์ ์๋ค.
์ข ๋ ์ฒ์ฒํ ์ดํด๋ณด์.
Store
store๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์ ์ฒด์ ์ธ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ ํ๋์ ์ ์ฅ์๋ผ๊ณ ๋ณด๋ฉด ๋๊ฒ ๋ค.
๋ฆฌ๋์ค์์ store๋ ํ ๊ฐ์ฌ์ผ๋ง ํ๋ค.
store์ ์ ์ฅ๋ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ค๋ฉด dispatch ํจ์๋ฅผ ํตํด action์ ์ ๋ฌํด์ผ ํ๋ ๋ฐฉ๋ฒ๋ฐ์ ์๋ค.
import { createStore } from 'redux'
const store = createStore(todos, ['Use Redux']) // store๋ฅผ ์์ฑํ๋ค
function addTodo(text) {
return {
type: 'ADD_TODO',
text
}
}
store.dispatch(addTodo('Read the docs'))
store.dispatch(addTodo('Read about the middleware'))
๊ตฌ๋ ํ๊ณ ์๋ ์ปดํฌ๋ํธ๋ store์ ์ํ๊ฐ ์ ๋ฐ์ดํธ๋ ๋๋ง๋ค ํจ๊ป ์ํ๊ฐ ์ ๋ฐ์ดํธ๋๋ค.
Action
Action์ ๊ธฐ๋ณธ์ ์ผ๋ก- ๋ฆฌ๋์๊ฐ ์ํํด์ผ ํ ์์ ์ธ, ์ด๋ฐ ํฌ๋งท์ ๊ฐ์ง๊ณ ์๋ ๊ฐ์ฒด๋ค.
{
type: 'Action์ ์ข
๋ฅ๋ฅผ ์๋ณํ๋ ๋ฌธ์์ด์ด๋ ์ฌ๋ณผ',
payload: 'Action ์คํ์ ํ์ํ ์ถ๊ฐ์ ์ธ ๋ฐ์ดํฐ',
}
์ปดํฌ๋ํธ์์๋ dispatch๋ผ๋ ํจ์๋ฅผ ํตํด action์ ๋ฆฌ๋์๋ก ๋ณด๋ผ ์ ์๋ค.
์๋์ฒ๋ผ ์ด๋ฒคํธ ํธ๋ค๋ฌ์ ๋ด๋ถ์ dispatch ํจ์๋ฅผ ํตํด์, ํด๋ฆญ ๊ฐ์ ํน์ ์ด๋ฒคํธ๊ฐ ์ผ์ด๋ฌ์ ๋ ์ํ๋ ์ ์๋ค.
Reducer
๋ฆฌ๋์๋ ํ์ฌ์ ์ํ(current state)์ action์ ์ธ์๋ก ๊ฐ๋ ํจ์์ด๊ณ , ์๋ก์ด ์ํ(new state)๋ฅผ ๊ฒฐ๊ณผ๋ก ๋ฐํํ๋ค.
๋ฆฌ๋์๋ ํญ์ ์์ ํจ์์ฌ์ผ ํ๋ค๋ ํน๋ณํ ๊ท์น์ด ์๋ค!
์ฌ๊ธฐ์ ์์ ํจ์๋ผ๋ ๊ฒ์, ๋์ผํ ์ธ์๋ฅผ ๋ฐ์์ ๋ ํญ์ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํด์ผ ํ๋ค๋ ๊ฒ์ด๋ค.
๊ทธ๋์ ๋ฆฌ๋์๋
- ๊ธฐ์กด์ ์ํ์ action ์ธ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํญ์ ์๋ก์ด ์ํ๋ง์ ๋ฐํํด์ผ ํ๋ค.
- ๋ฆฌ๋์ค์ ์ํ๋ ํญ์ ๋ถ๋ณ์ฑ์ ์ ์งํด์ผ ํ๊ธฐ ๋๋ฌธ์, ๋ถ๋ณ์ฑ ์๋ ์ ๋ฐ์ดํธ๋ฅผ ์ํด ๊ธฐ์กด ์ํ๋ฅผ ๋ฐํ์ผ๋ก ์๋ก์ด ์ํ๋ฅผ ๋ง๋ ๋ค. (๋ฎ์ด ์์ฐ๋ ๋๋)
- ๋ค๋ฅธ side effects ๋ ๋น๋๊ธฐ์ ์ธ ์์
์ ์ํํด์ ์๋๋ค.
- side effects๋ ํจ์ ๋ฐ๊นฅ์ ๋ฌด์ธ๊ฐ๋ฅผ ๋ฐ๊พธ๋ ๊ฒ๋ค์ธ๋ฐ, ํจ์์ ์ ๋ ฅ๋ ํ๋ผ๋ฏธํฐ๋ฅผ ๋ณํํ๊ฑฐ๋, ํจ์ ๋ฐ๊นฅ์ ์ํ๋ฅผ ๋ณํํ๊ฑฐ๋ ๋ฑ๋ฑ.. ์ ์์ ๋ค.
combineReducers ํจ์๋ฅผ ์ด์ฉํด์ ์ฌ๋ฌ ๊ฐ์ ๋ฆฌ๋์๋ฅผ ํ๋๋ก ์ฌ์ฉํ ์๋ ์๋ค.
import { combineReducers } from 'redux'
import todosReducer from './features/todos/todosSlice'
import filtersReducer from './features/filters/filtersSlice'
const rootReducer = combineReducers({
// Define a top-level state field named `todos`, handled by `todosReducer`
todos: todosReducer,
filters: filtersReducer
})
export default rootReducer
์ด๋ ๊ฒ ๋ฆฌ๋์ค์ ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์กฐ์ ๋ํด์ ์ฌ์ฉ ์ ๋ฆฌํด๋ดค๋๋ฐ,
๋ฆฌ๋์ค ๊ณต์ ํ์ด์ง์๋ ์์ธํ ์ค๋ช ์ด ์์ด์ ์ฐจ์ฐจ ์ฝ์ด๋ด์ผ์ง ์ถ๋ค.
๋ฆฌ๋์ค ํดํท์ ์ด์ฉํ๋ฉด ์ด๋ณด๋ค๋ ๋ ํธ๋ฆฌํ๊ฒ ์ํ ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค!..
์ธ์ ๊ฐ ์ด ๊ธ์ด ์ถ๊ฐ ์์ ์ด ๋๊ธธ ๋ฐ๋ผ๋ฉฐ.. ๐
์ฐธ๊ณ
udemy React ์๋ฒฝ ๊ฐ์ด๋
๐คธโ๏ธ๐คธโ๏ธ๐คธโ๏ธ๐คธโ๏ธ๐คธโ๏ธ๐คธโ๏ธ
๋ฐฉ๋ฌธํด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค! ๐
ํฌ์คํ ๋ค์ ๊ณต๋ถ ์ค์ธ ๋ด์ฉ์ ๊ธ๋ก ์์ฑํ ๊ฒ์ด๋ผ ๋ถ์กฑํ ์ ์ด ๋ง์ผ๋ ์ฐธ๊ณ ๋ถํ๋๋ฆฝ๋๋ค.
๋ถ์กฑํ ๋ถ๋ถ์ ๋ํ ์ฝ๋ฉํธ๋ ์ธ์ ๋ ํ์์ ๋๋ค.
์ข์ ํ๋ฃจ ๋ณด๋ด์ธ์, ๊ฐ์ฌํฉ๋๋ค! ๐
'๐ Studying > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] React-thunk ์์๋ณด๊ธฐ (0) | 2022.12.20 |
---|---|
[React] Styled-Components ํ์ฉ (0) | 2022.12.08 |
[React] State์ Props (0) | 2022.12.07 |
[React] PropTypes๋ก props ํ์ ๊ฒ์ฌ (0) | 2022.12.05 |
[React] ๋ฆฌ์กํธ์ ๋ผ์ดํ ์ฌ์ดํด ๐ค (0) | 2022.09.28 |
Comment