[Reactjs] Context
반응형
Reactjs Context
context를 이용하면 단계마다 일일이 props를 넘겨주지 않고도 컴포넌트 트리 전체에 데이터를 제공할 수 있습니다.
- React.createContext - Context 객체를 만듭니다.
- Context.Provider - Context 를 구독하는 컴포넌트틀에게 Context 의 변화를 알리는 역할을 합니다.
- value - 값에 대한 제한이 없음.
import React, { useContext } from "react";
export const ColorContext = React.createContext("red");
function Something() {
const color = useContext(ColorContext);
return <p style={{ color }}>어떤 컴포넌트</p>;
}
export default function FunctionComponent() {
return (
<ColorContext.Provider value="blue">
<p>함수로 작성한 컴포넌트에서 React Context 사용하기</p>
<Something />
</ColorContext.Provider>
);
}
만약 클래스 방식으로 작성한다면…
import React from "react";
export const ColorContext = React.createContext("red");
class Something extends React.Component {
// 정적 변수 contextType 네이밍을 임의적으로 변경할 수 없다.
static contextType = ColorContext;
render() {
return <p style={{ color: this.context as string }}>어떤 컴포넌트</p>;
}
}
export default function ClassesComponent() {
return (
<ColorContext.Provider value="red">
<p>클래스로 작성한 컴포넌트에서 React Context 접근하기</p>
<Something />
</ColorContext.Provider>
);
}
Context Consumer 컴포넌트를 사용한다면…
import React from "react";
export const ColorContext = React.createContext("red");
function Something() {
return (
<ColorContext.Consumer>
{(value) => <p style={{ color: value }}>어떤 컴포넌트</p>}
</ColorContext.Consumer>
);
}
export default function ConsumerComponent() {
return (
<ColorContext.Provider value="blue">
<p>Context Consumer를 이용한 React Context 사용하기</p>
<Something />
</ColorContext.Provider>
);
}
Context 업데이트 하기
import React, { useContext, useState } from "react";
export const ColorContext = React.createContext("red");
type Props = {
value: string;
onChange: () => void;
};
function Something(props: Props) {
const { onChange, value } = props;
return (
<p style={{ color: value }} onClick={onChange}>
어떤 컴포넌트
</p>
);
}
function SomethingReadOnly() {
const color = useContext(ColorContext);
return <p style={{ color }}>읽기만 하는 어떤 컴포넌트</p>;
}
export default function ContextUpdateComponent() {
const value = useContext(ColorContext);
const [color, setColor] = useState(value);
function handleChange() {
setColor(color === "black" ? "red" : "black");
}
return (
<ColorContext.Provider value={color}>
<p>함수로 작성한 컴포넌트에서 React Context 사용하기</p>
<Something value={color} onChange={handleChange} />
<SomethingReadOnly />
</ColorContext.Provider>
);
}
전체 코드 - https://codesandbox.io/s/reactjs-context-api-81coel
참고
반응형
'Tech' 카테고리의 다른 글
Test Containers for Spring Boot (0) | 2023.10.13 |
---|---|
SFTP 터널링 접속 (0) | 2022.12.26 |
[Nginx] 403 Forbidden / Permission denied 해결 (0) | 2022.12.22 |
[Vite] Vite 시작하기 (feat. reactjs, typescript, eslint, jest) (0) | 2022.12.09 |