자식 컴포넌트에 데이터를 전송하려는데 자식 컴포넌트가 너무 많을 때(props를 많이 해야될 때) 사용한다.
// 1. createContext 가져오기
import React, { useState, createContext } from 'react';
import Detail from './pages/Detail';
import Item from './pages/Item';
// 2. 변수에 정의. export 한 이유는 다른 파일에서 데이터를 사용할 때 Context를 import해서 사용해야 되기 때문.
import React, {createContext, useState} from 'react';
import Detail from "./Detail";
export let testContext = createContext();
const Home = () => {
let [item, setItem] = useState([10, 20, 30]);
return (
<div>
<h1>App</h1>
<testContext.Provider value={item}>
<Detail />
</testContext.Provider>
</div>
);
};
export default Home;
// 1. Context를 사용하기 위한 훅 가져오기
import {useContext, useEffect} from "react";
// 2. 사용할 Context 가져오기
import { testContext } from "./page";
const Detail = () => {
// 3. Context에 지정한 데이터 중 가져올 데이터 정의
let item = useContext(testContext);
useEffect(() => {
console.log(item); // 10, 20, 30
}, []);
return (
<>
Detail 컴포넌트.
{item}
</>
)
}
export default Detail;
// Home.tsx
import React, {createContext, useState} from 'react';
import Detail from "./Detail";
// 타입 따로 분리하기
interface IContext {
data1: number[]
data2: string
}
export let testContext = createContext<IContext>({
data1: [],
data2: ""
});
const Home = () => {
let [item1, setItem] = useState([10, 20, 30]);
let [item2, setItem2] = useState("두 번째 데이터");
return (
<div>
<h1>App</h1>
<testContext.Provider value={{
data1: item1,
data2: item2
}}>
<Detail />
</testContext.Provider>
</div>
);
};
export default Home;
// Detail.tsx
// 1. Context를 사용하기 위한 훅 가져오기
import {useContext, useEffect} from "react";
// 2. 사용할 Context 가져오기
import { testContext } from "./page";
// 타입 따로 분리하기
interface IContext {
data1: number[]
data2: string
}
const Detail = () => {
// 3. Context에 지정한 데이터 중 가져올 데이터 정의
let data: IContext = useContext(testContext);
useEffect(() => {
console.log(data); // 10, 20, 30
}, []);
return (
<>
Detail 컴포넌트.
{data.data1}
{data.data2}
</>
)
}
export default Detail;