이렇게 해 주면 this.context를 조회했을 때 현재 Context의 value를 가리키게 됩니다. 만약 setColor를 호출하고 싶다면 this.context.actions.setColor를 호출하면 되겠죠?

    컴포넌트를 다음과 같이 완성해 보세요.

    components/SelectColors.js

    import React, { Component } from 'react';
    import ColorContext from '../contexts/color';
     
    const colors = ['red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet'];
     
    class SelectColors extends Component {
      static contextType = ColorContext;
     
      handleSetColor = color => {
        this.context.actions.setColor(color);
      };
     
      handleSetSubcolor = subcolor => {
        this.context.actions.setSubcolor(subcolor);
      };
     
      render() {
        return (
          <div>
            <h2>색상을 선택하세요.</h2>
            <div style={{ display: 'flex' }}>
              {colors.map(color => (
                <div
                  key={color}
                  style={{
                    background: color,
                    width: '24px',
                    height: '24px',
                    cursor: 'pointer'
                  }}
                  onClick={() => this.handleSetColor(color)}
                  onContextMenu={e => {
                    e.preventDefault();
                    this.handleSetSubcolor(color);
                  }}
                />
              ))}
            </div>
            <hr />
          </div>
        );
      }
    }
     
    export default SelectColors;

     

    static contextType을 정의하면 클래스 메서드에서도 Context에 넣어 둔 함수를 호출할 수 있다는 장점이 있습니다. 단점이라면, 한 클래스에서 하나의 Context밖에 사용하지 못한다는 것입니다. 그러나 앞으로 새로운 컴포넌트를 작성할 때 클래스형으로 작성하는 일은 많지 않기 때문에 useContext를 사용하는 쪽을 권합니다.

    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.