React-Context

piper ·2024년 1월 8일
0

React

목록 보기
2/22

React Context:

컴포넌트 트리 전체에서 데이터를 공유할 수 있도록하는 기능
'createContext' 메서드로 함수 컨텍스트를 생성하고
'Provider' 컴포넌트를 사용하여 값을 전달한다.
'useContext'훅을 사용하여 컨텍스트 값을 받아온다.

(실습내용)
테마를 바꿔주는 값을 context에 저장하고 테마를 바꿔주는 객체를 전달하는 코드를 만들어보겠다. 이 때 값을 객체로 전달을 해주는 것이 포인트이다.

1) createContext로 컨텍스트를 만들어준다.

import React from "react";

const ThemeContext = React.createContext();
ThemeContext.displayName = "ThemeContext"

export default ThemeContext; 

2) 화면을 그려주는 메인컴포넌트를 만든다.
useContext 훅을 사용하여 컨텍스트의 값도 받아오는 부분이다.
유저와 인터렉션이 일어나는 부분으로 html와 이벤트가 발생하는 부분이다.

import React, { useContext } from 'react';
import ThemeContext from './ThemeContext';

const MainContext = (props) => {
    const value =useContext(ThemeContext);
    const {theme, toggleTheme} = value; 
    //value는 객체이다. 
    
    return (
        <div style={{
            width:"100vw",
            height: "100vh",
            padding: "1.5rem",
            backgroundColor: theme ==="light"? "yellow" : "black",
            color: theme === "light"? "black" : "white",
        }}>

            <p>안녕하세요. 테마 변경이 가능한 웹사이트입니다</p>
            <button onClick={toggleTheme}>테마 변경</button>
        </div>
    );
};

export default MainContext;

3) value의 값인 theme 과 toggleTheme의 값을 할당해주고 consumer 컴포넌트들에게 배포하기 위한 provider 컴포넌트를 만든다.

import React, { useCallback , useState} from 'react';
import MainContext from './MainContext';
import ThemeContext from './ThemeContext';


const DarkOrLight = (props) => {
    const [theme, setTheme] = useState("light")

    const toggleTheme = useCallback(()=>{
        if(theme==="light"){
            setTheme("dark")
        } else if (theme ==="dark"){
            setTheme("light")
        }
    },[theme])

    const value = {theme, toggleTheme}
    return (
        
            <ThemeContext.Provider value={value}>
            <MainContext />
            </ThemeContext.Provider>
       
    );
}

export default DarkOrLight;
profile
연습일지

0개의 댓글