본문 바로가기
React

Context API

by 글로리. 2021. 8. 5.

Context API

리액트 프로젝트에서 전역적으로 사용할 데이터가 있을 때 유용한 기능으로 예를 들면, 사용자 로그인정보, 애플리케이션 환경 설정, 테마 등이 있다.

// Context 생성
import { createContext }  from 'react';

const ColorContext = createContext({ color: 'gray' });

export default ColorContext;

// 적용할 컴포넌트 
import React, { useContext } from 'react';
import ColorContext from './color';

const ColorBox = () => {
    const { state } = useContext(ColorContext);

    return (
        <div>
            <div
                style={{
                    width: '64px',
                    height: '64px',
                    margin: '30px 0 0 50px',
                    background: state.color
                }}
            />
            <div
                style={{
                    width: '32px',
                    height: '32px',
                    margin: '10px 0 0 50px',
                    background: state.subcolor
                }}
            />
        </div>
    );
};

export default ColorBox;

// 변경해주는 컴포넌트
import React from 'react';
import { ColorConsumer } from './color';

const colors = ['red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet'];

const SelectColors = () => {
    return (
        <div>
            <div style={{ margin: '10px 0 0 50px' }}>
                <h3>색상을 선택하세요.</h3>
                <ColorConsumer>
                    {({ actions }) => (
                        <div style={{ display: 'flex' }}>
                            {colors.map(color => (
                                <div
                                    key={color}
                                    style={{
                                        background: color,
                                        width: '24px',
                                        height: '24px',
                                        cursor: 'pointer'
                                    }}
                                    onClick={() => actions.setColor(color)}
                                    onContextMenu={e => {
                                        e.preventDefault(); // 마우스 오른쪽 메뉴 무시
                                        actions.setSubcolor(color);
                                    }}
                                />
                            ))}
                        </div>
                    )}
                </ColorConsumer>
            </div>
            <hr />
        </div>
    );
};

export default SelectColors;

결과

'React' 카테고리의 다른 글

Redux(리덕스)  (0) 2021.08.05
Hooks  (0) 2021.07.20
라이프사이클 메서드  (0) 2021.07.19
컴포넌트 반복  (0) 2021.07.16
ref:DOM(클래스형컴포넌트)  (0) 2021.07.15

댓글