SlideShare uma empresa Scribd logo
1 de 14
Baixar para ler offline
ContextAPI
임광규
2020.ReactJS 1
ContextAPI
리액트프로젝트에서전역적으로사용할데이터가있을때유용한기능입니다.
사용자로그인정보,애플리케이션환경설정,테마등여러종류의전역데이터관리시사용합니
다.
또한리덕스,리액트라우터,styled-components등의라이브러리는ContextAPI를기반으로
구현되어있습니다.
2020.ReactJS 2
ContextAPI를사용한전역상태관리흐름이해하기
리액트애플리케이션은컴포넌트간의데이터를props로전달하기대문에컴포넌트여기저기서필요
한데이터가있을때는주로최상위컴포넌트에서state를이용하여관리합니다.
최상위 컴포넌트에서 props로 state를 하위 컴포넌트까지 전달 해야하기때문에구조가복잡해집니
다.실제리액트프로젝트에서는더많은컴포넌트를거쳐야할때도있고다루어야하는데이터가훨씬
많아질수도있으므로이런방식을사용하면유지보수성이낮아집니다.
따라서리덕스나MobX같은상태관리라이브러리를사용하여전역상태관리작업을더욱편하게처
리하기도합니다.v16.3업데이트이후에는 Context API 가많이개선되어별도의라이브러리를
사용하지않아도전역상태를손쉽게관리할수있습니다.
2020.ReactJS 3
state를이용한상태관리
APP의state를하위컴포넌트로전달하여
상태관리
2020.ReactJS 4
Context를이용한상태관리
ContextAPI를이용하여전역상태관리
2020.ReactJS 5
ContextAPI예제
Context생성
import { createContext } from 'react';
const ColorContext = createContext({ color: 'red' });
export default ColorContext;
2020.ReactJS 6
Consumer사용(ColorBox컴포넌트)
색상을props로받아오는것이아니라Context안에있는Consumer라는컴포넌트를이용해서조회
합니다.
import React from 'react';
import ColorContext from './context';
export default () => {
return (
<ColorContext.Consumer>
{value => (
<div
style={{
with: '100px',
height: '80px',
background: value.color
}}
/>
)}
</ColorContext.Consumer>
);
}2020.ReactJS 7
Provider사용
Context의value를변경하기위해서는Provider를사용하면됩니다.
import React from 'react';
import ColorBox from './ColorBox';
import ColorContext from './context';
export default () => {
return (
<ColorContext.Provider value={{color: 'red' }}>
<ColorBox />
</ColorContext.Provider>
);
}
2020.ReactJS 8
동적Context사용하기
import React, { createContext, useState } from 'react';
const ColorContext = createContext({
state: { color: 'red' },
action: { setColor: () => {} }
});
const ColorProvider = ({ children }) => {
const [color, setColor] = useState('red');
const value = { state: {color}, action: {setColor} };
return <ColorContext.Provider value={value}>{children}</ColorContext.Provider>;
}
const { Consumer: ColorConsumer } = ColorContext;
// Provider, Consumer 내보내기
export { ColorProvider, ColorConsumer };
export default ColorContext;
2020.ReactJS 9
동적Provider설정
import React from 'react';
import ColorBox from './ColorBox';
import { ColorProvider } from './context';
export default () => {
return (
<ColorProvider>
<ColorBox />
</ColorProvider>
);
}
2020.ReactJS 10
동적Consumer설정
import React from "react";
import { ColorConsumer } from "./context";
export default () => {
return (
<ColorConsumer>
{({ state, action }) => (
<>
<div
style={{
with: "100px",
height: "80px",
background: state.color
}}
/>
<button onClick={() => action.setColor("blue")}>blue</button>
</>
)}
</ColorConsumer>
);
};
2020.ReactJS 11
동적Context예제바로가기
2020.ReactJS 12
Consumer대신Hook사용하기
import React, { useContext } from "react";
import ColorContext from "./context";
export default () => {
const { state, action } = useContext(ColorContext);
return (
<>
<div
style={{
with: "100px",
height: "80px",
background: state.color
}}
/>
<button onClick={() => action.setColor("blue")}>blue</button>
</>
);
};
2020.ReactJS 13
마치며
컴포넌트간에상태를교류해야할때무조건부모==>자식흐름으로props를통해전달해주었는데
ContextAPI를통해더욱쉽게상태를교류할수있습니다.
전역적으로여기저기사용되는상태가있고컴포넌트의개수가많은상황이라면ContextAPI를사용
하는것을권장합니다.
2020.ReactJS 14

Mais conteúdo relacionado

Semelhante a 12.context api

[21]변화의 시대 : 안드로이드 앱 어떻게 개발할 것인가?
[21]변화의 시대 : 안드로이드 앱 어떻게 개발할 것인가?[21]변화의 시대 : 안드로이드 앱 어떻게 개발할 것인가?
[21]변화의 시대 : 안드로이드 앱 어떻게 개발할 것인가?NAVER Engineering
 
소통공유서울시정보화
소통공유서울시정보화소통공유서울시정보화
소통공유서울시정보화Jong-Sung Hwang
 
스마트 팩토리 표준화(RAMI 4.0 quick review)
스마트 팩토리 표준화(RAMI 4.0 quick review)스마트 팩토리 표준화(RAMI 4.0 quick review)
스마트 팩토리 표준화(RAMI 4.0 quick review)YOONSEOK JANG
 
[112]rest에서 graph ql과 relay로 갈아타기 이정우
[112]rest에서 graph ql과 relay로 갈아타기 이정우[112]rest에서 graph ql과 relay로 갈아타기 이정우
[112]rest에서 graph ql과 relay로 갈아타기 이정우NAVER D2
 
[1A5]효율적인안드로이드앱개발
[1A5]효율적인안드로이드앱개발[1A5]효율적인안드로이드앱개발
[1A5]효율적인안드로이드앱개발NAVER D2
 
[DDC 2018] 통신 데이터 분석환경 구축사례 (SKT, 홍태희)
[DDC 2018] 통신 데이터 분석환경 구축사례 (SKT, 홍태희)[DDC 2018] 통신 데이터 분석환경 구축사례 (SKT, 홍태희)
[DDC 2018] 통신 데이터 분석환경 구축사례 (SKT, 홍태희)Metatron
 
오픈소스 소프트웨어 성능 최적화 보고서 6장
오픈소스 소프트웨어 성능 최적화 보고서 6장오픈소스 소프트웨어 성능 최적화 보고서 6장
오픈소스 소프트웨어 성능 최적화 보고서 6장JamGun
 
20160414 ROS 2차 강의 (for 아스라다 팀)
20160414 ROS 2차 강의 (for 아스라다 팀)20160414 ROS 2차 강의 (for 아스라다 팀)
20160414 ROS 2차 강의 (for 아스라다 팀)Yoonseok Pyo
 
Jco 소셜 빅데이터_20120218
Jco 소셜 빅데이터_20120218Jco 소셜 빅데이터_20120218
Jco 소셜 빅데이터_20120218Hyoungjun Kim
 
홈페이지혁신소개자료(20120611)
홈페이지혁신소개자료(20120611)홈페이지혁신소개자료(20120611)
홈페이지혁신소개자료(20120611)마경근 마
 
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기XpressEngine
 
OCE - Cno 2014 private sector oriented open paas oce
OCE - Cno 2014 private sector oriented open paas   oceOCE - Cno 2014 private sector oriented open paas   oce
OCE - Cno 2014 private sector oriented open paas oceuEngine Solutions
 
[Pgday.Seoul 2018] replacing oracle with edb postgres
[Pgday.Seoul 2018] replacing oracle with edb postgres[Pgday.Seoul 2018] replacing oracle with edb postgres
[Pgday.Seoul 2018] replacing oracle with edb postgresPgDay.Seoul
 
[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...
[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...
[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...Taekyu Lim
 
KCSE 2015 Tutorial 빅데이터 분석 기술의 소프트웨어 공학 분야 활용 (...
KCSE 2015 Tutorial 빅데이터 분석 기술의  소프트웨어 공학 분야 활용 (...KCSE 2015 Tutorial 빅데이터 분석 기술의  소프트웨어 공학 분야 활용 (...
KCSE 2015 Tutorial 빅데이터 분석 기술의 소프트웨어 공학 분야 활용 (...Chanjin Park
 
MSA(Service Mesh), MDA(Data Mesh), MIA(Inference Mesh) 기술동향 소개-박문기@메ᄀ...
MSA(Service Mesh), MDA(Data Mesh), MIA(Inference Mesh) 기술동향 소개-박문기@메ᄀ...MSA(Service Mesh), MDA(Data Mesh), MIA(Inference Mesh) 기술동향 소개-박문기@메ᄀ...
MSA(Service Mesh), MDA(Data Mesh), MIA(Inference Mesh) 기술동향 소개-박문기@메ᄀ...문기 박
 
0222 사내세미나_오정민 스프링인액션
0222 사내세미나_오정민 스프링인액션0222 사내세미나_오정민 스프링인액션
0222 사내세미나_오정민 스프링인액션DataUs
 
Java 엔터프라이즈 어플리케이션을 효과적으로 마이크로서비스로 전환하기 (박선용, AWS 솔루션즈 아키텍트) :: AWS DevDay2018
Java 엔터프라이즈 어플리케이션을 효과적으로 마이크로서비스로 전환하기 (박선용, AWS 솔루션즈 아키텍트) :: AWS DevDay2018Java 엔터프라이즈 어플리케이션을 효과적으로 마이크로서비스로 전환하기 (박선용, AWS 솔루션즈 아키텍트) :: AWS DevDay2018
Java 엔터프라이즈 어플리케이션을 효과적으로 마이크로서비스로 전환하기 (박선용, AWS 솔루션즈 아키텍트) :: AWS DevDay2018Amazon Web Services Korea
 
DB관점에서 본 빅데이터 (2019년 8월)
DB관점에서 본 빅데이터 (2019년 8월)DB관점에서 본 빅데이터 (2019년 8월)
DB관점에서 본 빅데이터 (2019년 8월)Kee Hoon Lee
 

Semelhante a 12.context api (20)

[21]변화의 시대 : 안드로이드 앱 어떻게 개발할 것인가?
[21]변화의 시대 : 안드로이드 앱 어떻게 개발할 것인가?[21]변화의 시대 : 안드로이드 앱 어떻게 개발할 것인가?
[21]변화의 시대 : 안드로이드 앱 어떻게 개발할 것인가?
 
소통공유서울시정보화
소통공유서울시정보화소통공유서울시정보화
소통공유서울시정보화
 
스마트 팩토리 표준화(RAMI 4.0 quick review)
스마트 팩토리 표준화(RAMI 4.0 quick review)스마트 팩토리 표준화(RAMI 4.0 quick review)
스마트 팩토리 표준화(RAMI 4.0 quick review)
 
[112]rest에서 graph ql과 relay로 갈아타기 이정우
[112]rest에서 graph ql과 relay로 갈아타기 이정우[112]rest에서 graph ql과 relay로 갈아타기 이정우
[112]rest에서 graph ql과 relay로 갈아타기 이정우
 
[1A5]효율적인안드로이드앱개발
[1A5]효율적인안드로이드앱개발[1A5]효율적인안드로이드앱개발
[1A5]효율적인안드로이드앱개발
 
[DDC 2018] 통신 데이터 분석환경 구축사례 (SKT, 홍태희)
[DDC 2018] 통신 데이터 분석환경 구축사례 (SKT, 홍태희)[DDC 2018] 통신 데이터 분석환경 구축사례 (SKT, 홍태희)
[DDC 2018] 통신 데이터 분석환경 구축사례 (SKT, 홍태희)
 
오픈소스 소프트웨어 성능 최적화 보고서 6장
오픈소스 소프트웨어 성능 최적화 보고서 6장오픈소스 소프트웨어 성능 최적화 보고서 6장
오픈소스 소프트웨어 성능 최적화 보고서 6장
 
20160414 ROS 2차 강의 (for 아스라다 팀)
20160414 ROS 2차 강의 (for 아스라다 팀)20160414 ROS 2차 강의 (for 아스라다 팀)
20160414 ROS 2차 강의 (for 아스라다 팀)
 
Jco 소셜 빅데이터_20120218
Jco 소셜 빅데이터_20120218Jco 소셜 빅데이터_20120218
Jco 소셜 빅데이터_20120218
 
홈페이지혁신소개자료(20120611)
홈페이지혁신소개자료(20120611)홈페이지혁신소개자료(20120611)
홈페이지혁신소개자료(20120611)
 
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
 
OCE - Cno 2014 private sector oriented open paas oce
OCE - Cno 2014 private sector oriented open paas   oceOCE - Cno 2014 private sector oriented open paas   oce
OCE - Cno 2014 private sector oriented open paas oce
 
[Pgday.Seoul 2018] replacing oracle with edb postgres
[Pgday.Seoul 2018] replacing oracle with edb postgres[Pgday.Seoul 2018] replacing oracle with edb postgres
[Pgday.Seoul 2018] replacing oracle with edb postgres
 
[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...
[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...
[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...
 
KCSE 2015 Tutorial 빅데이터 분석 기술의 소프트웨어 공학 분야 활용 (...
KCSE 2015 Tutorial 빅데이터 분석 기술의  소프트웨어 공학 분야 활용 (...KCSE 2015 Tutorial 빅데이터 분석 기술의  소프트웨어 공학 분야 활용 (...
KCSE 2015 Tutorial 빅데이터 분석 기술의 소프트웨어 공학 분야 활용 (...
 
13.code split
13.code split13.code split
13.code split
 
MSA(Service Mesh), MDA(Data Mesh), MIA(Inference Mesh) 기술동향 소개-박문기@메ᄀ...
MSA(Service Mesh), MDA(Data Mesh), MIA(Inference Mesh) 기술동향 소개-박문기@메ᄀ...MSA(Service Mesh), MDA(Data Mesh), MIA(Inference Mesh) 기술동향 소개-박문기@메ᄀ...
MSA(Service Mesh), MDA(Data Mesh), MIA(Inference Mesh) 기술동향 소개-박문기@메ᄀ...
 
0222 사내세미나_오정민 스프링인액션
0222 사내세미나_오정민 스프링인액션0222 사내세미나_오정민 스프링인액션
0222 사내세미나_오정민 스프링인액션
 
Java 엔터프라이즈 어플리케이션을 효과적으로 마이크로서비스로 전환하기 (박선용, AWS 솔루션즈 아키텍트) :: AWS DevDay2018
Java 엔터프라이즈 어플리케이션을 효과적으로 마이크로서비스로 전환하기 (박선용, AWS 솔루션즈 아키텍트) :: AWS DevDay2018Java 엔터프라이즈 어플리케이션을 효과적으로 마이크로서비스로 전환하기 (박선용, AWS 솔루션즈 아키텍트) :: AWS DevDay2018
Java 엔터프라이즈 어플리케이션을 효과적으로 마이크로서비스로 전환하기 (박선용, AWS 솔루션즈 아키텍트) :: AWS DevDay2018
 
DB관점에서 본 빅데이터 (2019년 8월)
DB관점에서 본 빅데이터 (2019년 8월)DB관점에서 본 빅데이터 (2019년 8월)
DB관점에서 본 빅데이터 (2019년 8월)
 

Mais de Daniel Lim

내가 생각하는 개발자란?
내가 생각하는 개발자란?내가 생각하는 개발자란?
내가 생각하는 개발자란?Daniel Lim
 
개발자를 넘어 기술 리더로 가는 길을 읽고
개발자를 넘어 기술 리더로 가는 길을 읽고개발자를 넘어 기술 리더로 가는 길을 읽고
개발자를 넘어 기술 리더로 가는 길을 읽고Daniel Lim
 
스크럼 101
스크럼 101스크럼 101
스크럼 101Daniel Lim
 
nodejs_101.pdf
nodejs_101.pdfnodejs_101.pdf
nodejs_101.pdfDaniel Lim
 
피드백 시스템
피드백 시스템피드백 시스템
피드백 시스템Daniel Lim
 
9.component style
9.component style9.component style
9.component styleDaniel Lim
 
7.component life cycle
7.component life cycle7.component life cycle
7.component life cycleDaniel Lim
 
6.component repeat
6.component repeat6.component repeat
6.component repeatDaniel Lim
 
4.event handling
4.event handling4.event handling
4.event handlingDaniel Lim
 
3.component 101
3.component 1013.component 101
3.component 101Daniel Lim
 
Swagger? OAS? with NodeJS
Swagger? OAS? with NodeJSSwagger? OAS? with NodeJS
Swagger? OAS? with NodeJSDaniel Lim
 
Kubernetes object에 대하여
Kubernetes object에 대하여Kubernetes object에 대하여
Kubernetes object에 대하여Daniel Lim
 
라즈베리파이 배우기 GPIO 편
라즈베리파이 배우기 GPIO 편라즈베리파이 배우기 GPIO 편
라즈베리파이 배우기 GPIO 편Daniel Lim
 

Mais de Daniel Lim (20)

내가 생각하는 개발자란?
내가 생각하는 개발자란?내가 생각하는 개발자란?
내가 생각하는 개발자란?
 
개발자를 넘어 기술 리더로 가는 길을 읽고
개발자를 넘어 기술 리더로 가는 길을 읽고개발자를 넘어 기술 리더로 가는 길을 읽고
개발자를 넘어 기술 리더로 가는 길을 읽고
 
스크럼 101
스크럼 101스크럼 101
스크럼 101
 
nodejs_101.pdf
nodejs_101.pdfnodejs_101.pdf
nodejs_101.pdf
 
For You
For YouFor You
For You
 
Nest js 101
Nest js 101Nest js 101
Nest js 101
 
피드백 시스템
피드백 시스템피드백 시스템
피드백 시스템
 
9.component style
9.component style9.component style
9.component style
 
7.component life cycle
7.component life cycle7.component life cycle
7.component life cycle
 
8.hooks
8.hooks8.hooks
8.hooks
 
6.component repeat
6.component repeat6.component repeat
6.component repeat
 
4.event handling
4.event handling4.event handling
4.event handling
 
5.ref 101
5.ref 1015.ref 101
5.ref 101
 
3.component 101
3.component 1013.component 101
3.component 101
 
2.jsx 101
2.jsx 1012.jsx 101
2.jsx 101
 
1.react 101
1.react 1011.react 101
1.react 101
 
Swagger? OAS? with NodeJS
Swagger? OAS? with NodeJSSwagger? OAS? with NodeJS
Swagger? OAS? with NodeJS
 
CuKu V1.3
CuKu V1.3CuKu V1.3
CuKu V1.3
 
Kubernetes object에 대하여
Kubernetes object에 대하여Kubernetes object에 대하여
Kubernetes object에 대하여
 
라즈베리파이 배우기 GPIO 편
라즈베리파이 배우기 GPIO 편라즈베리파이 배우기 GPIO 편
라즈베리파이 배우기 GPIO 편
 

12.context api