์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- ์ค๋ผํด
- html
- ์ ๋ฆฌํธ๋ฆฌํธ
- ๋ฐ์ํ
- ํ์ด์ฌ
- Python
- database
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ๊ฐ์ดํ ์ข ๋ญ๊ฐ๋น
- ํ์ฒ์ ๋ฆฌํธ๋ฆฌํธ
- ๋ ์
- ๊ฐ๋ฐ
- ์ํ
- ํ๋ก๊ทธ๋๋ฐ
- ์๋ฐ
- Java
- ๋๊ฐ
- ์ํ์ฃผ
- css
- ๋ฐฐ์์ ๋ฐฐ์
- ์ฝ๋ฉ
- JavaScript
- ์ค๋ธ์
- ์ฑ
- ์๋ฐ์คํฌ๋ฆฝํธ
- ํฐ์คํ ๋ฆฌ์ฑ๋ฆฐ์ง
- ์นดํ๋๊ฐ
- K๋ฐฐํฐ๋ฆฌ๋ ๋ณผ๋ฃจ์
- ๊น๋ฏธ๊ฒฝ์๋งํ์์
- ์นํผ๋ธ๋ฆฌ์ฑ
- Today
- Total
JiYoung Dev ๐ฅ
[React] context API (2023.05.22) ๋ณธ๋ฌธ
๐ context API ์ฐ๋ ์ด์
๐ props์ ๋จ์
๋จ๋ฐฉํฅ ๋ฐ์ดํฐ์ ํ๋ฆ
์์ ๊ฐ์ ๋ฐ์ดํธ ํ๋ฆ์ ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ (one-way reactive data flow)์ด๋ผํ๊ณ
react๋ ์ด๋ฌํ ํ๋ฆ์ ๊ฐ์ง๊ณ ์์
๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ์ ์ฅ์
1. ๊ด๋ฆฌ์ ์ฉ์ดํจ
2. DOM๊ณผ์ ๊ถํฉ - tree๊ตฌ์กฐ์ dom ๊ตฌ์กฐ์ ์ ๋ฆฌํจ
๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ์ ๋จ์
์์์์์์ ๋ถ๋ชจ์์๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ก ์ ๋ฌํ ์ ์์
โ๏ธ ๋ถ๋ชจ์์๊ฐ ์์์์์ ๊ฐ์ ๋ฐ์๋ณผ ์ ์๋๋ก ํ๋ ๋ฐฉ๋ฒ
๊ท์ฐฎ๋ค >> contextAPI๋ฅผ ์ฌ์ฉํจ
๐ context API
๐ context API ์ฌ์ฉํ๋ ์ด์
props๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌ๋ฌ๋ฒ ์ฌ์ฉํด์ผ ํจ
๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ก ๋ณด๊ดํ์ฌ ๋์ด๋ค ์ฐ๋ ๋ฒ >> Context API
์ฅ์ : ์ ์ญ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค
๋จ์ : ์ฝ๋ ์์ฑ์ด ์ด๋ ต๋ค
/* Context๋?
๋ฆฌ์กํธ ์ปดํฌ๋ํธ ๊ฐ์ ๊ฐ์ ์ ์ญ์ ์ผ๋ก ๊ณต์ ํ ์ ์๊ฒ ํด์ฃผ๋ ๊ธฐ๋ฅ
Q. Props๋ก๋ง ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ์ ๋ ๋ฐ์ํ๋ ๋ฌธ์ ๋?
A. ๊น์ํ๊ฒ ์์นํ ์ปดํฌ๋ํธ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํด์ผํ ๊ฒฝ์ฐ,
์ฌ๋ฌ ์ปดํฌ๋ํธ์ ์ฐ๋ฌ์ Props๋ฅผ ์ ๋ฌํด์ผ ํจ
>> ๋ถํธํ ๋ฟ๋๋ฌ ์ค์๊ฐ ์ฆ์
>> ์ด๋ฌํ ํ์์ Props Drilling์ด๋ผ๊ณ ํจ
๊ทธ๋์ ์ฐ๋ฆฌ๋ context๋ก ์ํ๋ฅผ ์ ์ญ์ ์ผ๋ก ๊ด๋ฆฌํด ์ค ๊ฒ!
** ๋ง๋๋ ์์!
1. context๋ฅผ ์์ฑํด์ค๋ค. (context๋ ํ๋์ ๋ณด๊ดํจ์ผ๋ก ์๊ฐํ๋ฉด ๋จ) - createContext => export
2. context๋ฅผ ์ฌ์ฉํ ์ปดํฌ๋ํธ์ import
3. ์ปดํฌ๋ํธ๋ฅผ Context Provider๋ก ๊ฐ์ธ์ค๋ค. - ์ ๊ณตํ๋ ์ญํ
4. ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ฌ ์ปดํฌ๋ํธ์์ useContext ํจ์๋ฅผ ์ฌ์ฉํ๋ค. */
** ์ค๋ฅ ์ข
๋ฅ
1) useState is not defined or useContext is not defined
- import ๋ฅผ ์ํ๊ฑฐ๋ ์คํ๊ฐ ๋ ๊ฒฝ์ฐ์
๋๋ค.
2) [Object Object] .. ๊ฐ์ฒด ์์ ์์ฑ์ ํด์ผํ๋๋ฐ ์ค๊ดํธ๋ฅผ ์์ด ๊ฒฝ์ฐ
3) npm start ๊ฐ ์๋ผ์ => ๊ฒฝ๋ก ๋ค์ ํ์ธํ๊ธฐ
4) 'ThemeContext' ๋ผ๋ ์ด๋ฆ์ context ํ์ผ์ด ํ๋ ์์ด์ผ ํฉ๋๋ค - createContext ์ฉ๋
=> ์ด๋ฆ์ ๋ฌ๋ผ๋ ๋จ
๐ context API ์ฌ์ฉํ๊ธฐ
1. context.js ํ์ผ ์์ฑ
import { createContext } from "react";
// context ์์ฑ ๊ธฐ๋ฅ์ react์์ ๊ฐ์ ธ์ค๊ธฐ
export const DarkModeContext = createContext(null);
2. ์ฝคํผ๋ํธ์ context import ๋ฐ ์ปดํฌ๋ํธ๋ฅผ provider๋ก ๊ฐ์ธ๊ธฐ
import React from 'react'
import Ex03Header from './components/Ex03Header'
import Ex03Main from './components/Ex03Main'
import { DarkModeContext } from './context/Ex03DarkMode'
const Ex03 = () => {
return (
<DarkModeContext.Provider>
<div>
<Ex03Header/>
<Ex03Main/>
</div>
</DarkModeContext.Provider>
)
}
export default Ex03
3. provider value๊ฐ ์ค์
- value๊ฐ์ ์ ์ญ์ ์ผ๋ก ์ฌ์ฉํ ๋ฐ์ดํฐ
- useState ํ์ฉํ์ฌ ๋ณํ๋ ๊ฐ์ value ๊ฐ์ผ๋ก ์ง์
import React, { useState } from 'react'
import Ex03Header from './components/Ex03Header'
import Ex03Main from './components/Ex03Main'
import { DarkModeContext } from './context/Ex03DarkMode'
const Ex03 = () => {
//main์์ ๋ฒํผ ํด๋ฆญ์ฌ๋ถ๋ฅผ ํ๋จํ์ฌ header๋ก ์ ์ก
//๋ฒํผ ํด๋ฆญ์ฌ๋ถ : ์ ์ญ์ ์ผ๋ก ์ฌ์ฉํ ๋ฐ์ดํฐ
const[isDark, setIsDark] = useState(false);
return (
<DarkModeContext.Provider value={{isDark, setIsDark}}>
<div>
<Ex03Header/>
<Ex03Main/>
</div>
</DarkModeContext.Provider>
)
}
export default Ex03
4. ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ฌ ์ปดํฌ๋ํธ์์ useContext ์ฌ์ฉ
import React, { useContext } from 'react'
import { DarkModeContext } from '../context/Ex03DarkMode'
const Ex03Main = () => {
const{setIsDark} = useContext(DarkModeContext)
return (
<div>Ex03Main
<button onClick={()=>{setIsDark(true)}}>๋คํฌ๋ชจ๋</button>
</div>
)
}
export default Ex03Main
'Study > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] useRef (2023.05.24) (0) | 2023.05.24 |
---|---|
[React] To-do List ๋ง๋ค๊ธฐ (2023.05.23) (0) | 2023.05.24 |
[React] React ๋ณต์ต (๊ฐ๋ ~ context API๊น์ง) (2023.05.22) (0) | 2023.05.22 |
[React] Component, Props, State (2023.05.16) (0) | 2023.05.16 |
[React] React ๊ฐ์ ๋ฐ ์ค์น, JSX ๋ฌธ๋ฒ (2023.05.15) (1) | 2023.05.16 |