Prop : 조부모(data전달) -> 부모(data 사용X 전달) -> 자식(사용)
Context API : 조부모 -> 자식(사용)
//1. createContext를 import
import {createContext} from 'react'
// 상위 컴포넌트
// 2. Context 객체 생성
const UserContext = createContext(초기값)
// createContext(초기값)은 {Provider, Consumer} 객체를 반환
// createContext(defaultValue) => {Provider, Consumer}
function App() {
return (
<div>
<UserContext.Provider value=전달할값>
<Profile />
</UserContext.Provider>
</div>
);
}
.....
// Profile 컴포넌트의 자아아아~~식 컴포넌트
// 3. 사용할 컴포넌트에서 Consumer로 감싼다.
function 자아아아식(){
return (
<UserContext.Consumer>
{value => <p>{`${value}`}</p>}
</UserContext.Consumer}
);
}
알아두기! : Provider 컴포넌트에 새로운 데이터가 입력되면 모든 Consumer 컴포넌트는 부모 컴포넌트에 memo등이 적용되는 등의 중간 컴포넌트의 렌더링 여부와 상관없이 다시 렌더링된다.
const UserContext = createContext("")
const ThemeContext = createContext('dark')
// createContext(초기값)은 {Provider, Consumer} 객체를 반환
// createContext(defaultValue) => {Provider, Consumer}
function App() {
return (
<div>
<ThemeContext.Provider value='light'>
<UserContext.Provider value=전달할값>
<Profile />
</UserContext.Provider>
</ThemeContext.Provider>
</div>
);
}
..... 자아아식
function 자아아아식(){
return (
<ThemeContext.Consumer>
{theme => (
<UserContext.Consumer>
{value => <p style={{color: theme}}>{`${value}`}</p>}
</UserContext.Consumer>
)}
</ThemeContext.Consumer>
);
}
const UserContext = createContext({username:'', helloCount:0});
const SetUserContext = createContext(()=>{});
function App(){
const [user, setUser] => useState({username:'mike', helloCount:0)};
return (
<div>
<SetUserContext.Provider value={setUser}>
<UserContext.Porvider value={user}>
<Profile />
</UserContext.Provider>
</SetUserContext.Provider>
</div>
);
}