[DAY - 83] context

2023. 6. 30. 19:44·🔥 부트캠프-웹 개발 🔥/React

context

 

https://ko.legacy.reactjs.org/docs/context.html

 

Context – React

A JavaScript library for building user interfaces

ko.legacy.reactjs.org

기존 방식

 

기존엔 컴포넌트끼리 같은 props, state를 사용하려면 공통 부모에서 관리를 해야 했다.

만약 자식 컴포넌트들이 많아지고 복잡해진다면 관리하기 어려울 것이다.

 

 

context

 

하지만 context를 사용하면 부모-자식 관계를 따질 필요 없이 전역 데이터를 저장해 해당 데이터가 필요한 컴포넌트에서 불러올 수 있다.

 

import { createContext, useState } from "react";

// 1) 관리자 생성
export const ColorContext = createContext();

// 2) 변수명 변경       4) props
const ColorProvider = (props) => {
    // 6) 모든 state, function 작성
    const [color, setColor] = useState('tan')
    const onRed =()=> setColor('red')
    const onGreen =()=> setColor('green')
    const onBlue =()=> setColor('blue')
    const onBlack =()=> setColor('black')
    return (
        // 3) 공급자
        <ColorContext.Provider value={{color, onRed, onGreen, onBlue, onBlack}}>
            {/* 컴포넌트 안에 컬러 디자인 */}
            {/* 5) props.children */}
            {props.children}
        </ColorContext.Provider>
    );
};

export default ColorProvider;

 

1) context 관리자를 만들어 준다.

2) context 관리자와 변수명이 같지 않도록 컴포넌트 명을 변경해 준다.

3) context 공급자 provider에 value를 넣는다.

4) 매개변수 props를 넣고

5) 공급자 안에 props.children을 추가해 준다.

 

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

const Color = () => {
    const {color, onRed, onGreen, onBlue, onBlack} = useContext(ColorContext)
    return (
        <div>
            <h2 style={{color:color}}>Design Color : {color}</h2>
            <p>
                <button onClick={onRed}>Red</button>
                <button onClick={onGreen}>Green</button>
                <button onClick={onBlue}>Blue</button>
                <button onClick={onBlack}>Black</button>
            </p>
        </div>
    );
};

export default Color;

 

그 뒤 화면에 출력될 Color 컴포넌트에서 value를 비구조할당으로 받아온다.

return문 안에서 값을 표시하고, 함수를 위치에 맞게 작성해 준다.

 

const App = () => {
  return (
    <div>
      <ColorProvider>
        <Color /> 
      </ColorProvider>
    </div>
  );
};

 

App.js에선 출력될 컴포넌트를 해당 Provider로 감싸준다. 이렇게 해주어야 Color 컴포넌트에서 값을 받아올 수 있다.

 

'🔥 부트캠프-웹 개발 🔥/React' 카테고리의 다른 글
  • [DAY - 85] Redux
  • [DAY - 84] context 예제, useReducer
  • [DAY - 82] #3 React-router clone-coding
  • [DAY - 81] #2 React-router clone-coding
Yeonhub
Yeonhub
✨ https://github.com/yeonhub 📧 lsy3237@gmail.com
  • Yeonhub
    비 전공자의 Be developer
    Yeonhub
  • 전체
    오늘
    어제
    • 전체보기 (169)
      • 🔍 Tech 🔍 (19)
        • Front-End (11)
        • Back-End (4)
        • AI (1)
        • Server (1)
        • Etc (2)
      • 💡 원티드 프리온보딩 챌린지 💡 (14)
        • PRE-ONBOARDING_AI (11월) (1)
        • PRE-ONBOARDING_FE (2월) (2)
        • PRE-ONBOARDING_FE (1월) (2)
        • PRE-ONBOARDING_FE (12월) (9)
      • 🔥 부트캠프-웹 개발 🔥 (118)
        • HTML5 (7)
        • CSS3 (21)
        • JavaScript (27)
        • JavaScript_advanced (9)
        • React (24)
        • Next (1)
        • MYSql (5)
        • Node (5)
        • 오늘하날(개인프로젝트) (12)
        • 이젠제주투어(팀프로젝트) (7)
      • 💻 CS 💻 (1)
        • 알고리즘 (1)
      • ⚡ 코딩테스트 ⚡ (11)
        • JavaScript (11)
      • 📚 Books 📚 (6)
        • 클린 아키텍처 (2)
        • 인사이드 자바스크립트 (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • Github
  • 공지사항

  • 인기 글

  • 태그

    컴파운드 컴포넌트 패턴
    라스콘
    프론트엔드 테스트코드
    node.js fcm
    라스콘4
    expo fcm push
    expo 지도
    expo deep linking
    Node
    expo map
    expo 길찾기
    node cron
    react vite
    python node
    rn admob
    php node
    expo node fcm
    node fcm
    react native admob
    expo admob
    react native expo fcm
    react native firebase analytics
    node crontab
    expo fcm
    expo google map
    rn bottom sheet
    javascript fcm
    bottom sheet
    react native bottom sheet
    react native analytics
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Yeonhub
[DAY - 83] context
상단으로

티스토리툴바