๊ณต๋ถ€ ๊ธฐ๋ก โœ๏ธ/React

[React] study (Context) #5์ผ์ฐจ

๋ฒ„๋‘˜ 2023. 4. 15. 11:26

 

๐Ÿ“– ์ฐธ๊ณ  ์„œ์ :

์†Œํ”Œ์˜ ์ฒ˜์Œ ๋งŒ๋‚œ ๋ฆฌ์•กํŠธ 

 

๐Ÿ“ผ ์ฐธ๊ณ  ๊ฐ•์˜:

์ƒํ™œ์ฝ”๋”ฉ- React context API

 

 

๐Ÿ“†  ์ง„ํ–‰

chapter 14 Context โœ…

 


14.์ปจํ…์ŠคํŠธ

 

์ปจํ…์Šค

์ปดํฌ๋„ŒํŠธ๋“ค ์‚ฌ์ด์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ props๋ฅผ ํ†ตํ•ด ์ „๋‹ฌํ•˜๋Š”๊ฒƒ์ด ์•„๋‹Œ ์ปดํฌ๋„ŒํŠธ ํŠธ๋ฆฌ๋ฅผ ํ†ตํ•ด ๊ณง๋ฐ”๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹

์–ด๋–ค ์ปดํฌ๋„ŒํŠธ๋“ ์ง€ ์ปจํ…์ŠคํŠธ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ์— ์‰ฝ๊ฒŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ

-์–ธ์ œ ์‚ฌ์šฉํ•˜๋‚˜์š”?

์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ๋“ค์ด ๊ณ„์†ํ•ด์„œ ์ ‘๊ทผ์ด ์ผ์–ด๋‚  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋“ค์ด ์žˆ๋Š” ๊ฒฝ์šฐ(๋กœ๊ทธ์ธ,ํ™”๋ฉด๋ฐ๊ธฐ)

provider์˜ ๋ชจ๋“  ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์–ผ๋งˆ๋‚˜ ๊นŠ์ด ์œ„์น˜ํ•ด ์žˆ๋Š”์ง€ ๊ด€๊ณ„์—†์ด ์ปจํ…์ŠคํŠธ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค

 

Context API

์ „์—ญ์ ์œผ๋กœ ์ƒํƒœ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๋„๊ตฌ 

 

useContext(๋‚ด๊ฐ€ ์–ด๋–ค ์ปจํ…์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ• ๊ฑด์ง€)

์ „์—ญ์ ์œผ๋กœ ์ƒํƒœ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋‹ค.

์›ํ•˜๋Š” ๊ณณ์— ์ƒํƒœ๋ฅผ ๋ฐ”๊ฟ” ํ•˜์œ„์— ๊ฐ„ํŽธํ•˜๊ฒŒ ์ƒํƒœ ๊ณต์œ ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

์‹ค์Šต์ฝ”๋“œ

import React,{createContext,useContext} from "react";
import './style.css';
const themeDeafault={border:'10px solid pink'};
const ThemeContext = createContext(themeDeafault);

//
export default function ContextAPI(){
    const theme=useContext(ThemeContext);

    return(
        <ThemeContext.Provider vlaue={{border:'10px solid black'}}>
        <div className="root" style={theme}>
            <h1>
                Hello React
                <Sub1/>
            </h1>
        </div>
        </ThemeContext.Provider>
    );
}

function Sub1(){
    //๋ถ€๋ชจ์ค‘ ๊ฐ€์žฅ ๋จผ์ € ๋“ฑ์žฅํ•˜๋Š” value๊ฐ’์„ ๊ฐ–๋Š”๋‹ค
    const theme=useContext(ThemeContext);
    return(
        <ThemeContext.Provider value={{border:'10px solid green'}}>
        <div style={theme}>
            <h1 >sub1
            </h1>
            <Sub2/>
        </div>
        </ThemeContext.Provider>
    );
}
function Sub2(){
    const theme=useContext(ThemeContext);
    return(
        <div style={theme}>
            <h1>sub2
            </h1>
                <Sub3/>
        </div>
    );
}
function Sub3(){
    const theme=useContext(ThemeContext);
    return(
        <div style={theme}>
            <h1>sub3</h1>
        </div>
    );
}