ex) 1노드에 있는 state를 5노드에서 필요로 하면 2,3,4 노드에도 props 전달해줘야 하는 문제를 개선한 API
/* 상위컴포넌트 */
import {createContext} from 'react';
//Context 선언 및 다른 컴포넌트가 사용할 수 있게 export
export let Context명 = React.createContext();
function 상위컴포넌트(){
let [state명, setState명] = useState(전달할데이터);
return(
<Context명.Provider value={{ state명 }}> //전달할 state여러 개 입력 가능
<하위컴포넌트 state명={state명} />
</Context명.Provider>
)
}
/* 하위컴포넌트 */
import {useContext} from 'react';
import {Context명} from '경로'; //상위에서 export한 Context명 그대로 들고오기
function 하위컴포넌트(){
let {state명} = useContext(Context명) //상위에서 선언한 state,Context 그대로 입력
return(
//state사용하면 됨
)
}
/* App.js */
import {createContext} from 'react';
export let stockContext = createContext(); //state(stock)담을 context생성
function App(){
let [stock, setStock] = useState([10,11,12]); //전달할 state(stock)
(중략)
<stockContext.Provider value={{ stock }}>
<Detail stock={stock} /> //state(stock) 전달완료
</stockContext.Provider>
}
/* detail.js (Detail컴포넌트) */
import {stockContext} from './../App.js'
function Detail(){
let {stock} = useContext(stockContext);
return (
{stock} //stock에 들어있는 데이터 출력함
)
}
useContext()
를 사용하고 있는 컴포넌트는 다른 파일에서 재사용할 때 Context를 import해야하므로 더 귀찮아 질 수도 있음...👉🏻 Context API 대체제 : Redux같은 외부 라이브러리
다음 포스팅 [React] Redux 에서 확인 가능