기존 구린 방법
1. 하위 컴포넌트 변경하기 (A의 버튼을 눌러서 B, C, D를 거쳐 E에 있는 값을 변경)
2. 상위 컴포넌트 변경하기 (E의 버튼을 눌러 역으로 D,C,B 를 거쳐 A에 있는 값을 변경)
각 함수들에 props를 인자로 받아서, B,C,D,E로 넘겨주어야 했다.
이문제를 해결하기 위해 useContext를 사용하기로 했다.
1. 하위 컴포넌트 전체에 데이터를 공유하는 방법
데이터를 set 하는 놈 = 가장 상위 컴포넌트 => provider
데이터를 get 하는 놈 = 모든 하위 컴포넌트에서 접근 가능
1) consumer
import PersonContext from "../contexts/PersonContext";
export default function Example1() {
return (
<PersonContext.Consumer>
{(persons) => (
<ul>
{persons.map((person) => (
<li>{person.name}</li>
))}
</ul>
)}
</PersonContext.Consumer>
);
}
2) class컴포넌트에서 get (비선호)
import React from "react";
import PersonContext from "../contexts/PersonContext";
export default class Example2 extends React.Component {
static contextType = PersonContext;
render() {
const persons = this.context;
return (
<ul>
{persons.map((person) => (
<li>{person.name}</li>
))}
</ul>
);
}
}
3) funtional 컴포넌트에서 get (최근 선호되는 방식)
import { useContext } from "react";
import PersonContext from "../contexts/PersonContext";
export default function Example3() {
const persons = useContext(PersonContext);
return (
<ul>
{persons.map((person) => (
<li>{person.name}</li>
))}
</ul>
);
}
반응형
'Frontend > React' 카테고리의 다른 글
Vite + React + tailwind css + firebase 초기세팅 (0) | 2023.05.13 |
---|---|
[React] Basic Hooks / Additional Hooks / React Router Hooks (0) | 2021.11.16 |
[React] Component Styling / Style loader / React Shadow / Ant Design (0) | 2021.11.16 |
[React] router / react-router-dom / query-string / redirect (0) | 2021.11.16 |
[React] 기본 플러그인 개념 및 설정 방법 (0) | 2021.11.03 |