Context API의 Consumer를 사용하지 않아도 되며 더욱 쉽게 사용하기 위해 추가한 Hook
import React, { createContext } from 'react';
// Context 객체를 생성
const userStore = createContext(null);
const App = () => {
return <div>
App
</div>
}
export default App;
import React, { createContext, useState } from 'react';
const userStore = createContext(null);
const App = () => {
const [name, setName] = useState("홍길동");
return <div>
{/* Context 객체의 프로퍼티 Provider를 호출하여 사용한다. */}
<userStore.Provider>
<UserAge />
<UserAddress />
</userStore.Provider>
</div>
}
import React, { createContext, useState } from 'react';
const userStore = createContext(null);
const App = () => {
const [name, setName] = useState("홍길동");
return <div>
{/* Provider의 프로퍼티인 value에 값을 넣어준다. */}
<userStore.Provider value={{ name, setName }}>
<UserAge />
<UserAddress />
</userStore.Provider>
</div>
}
// UserAge Component
const UserAge = () => {
// useContext의 인자로 createContext로 생성한 Context객체를 넣어준다.
const userInfo = useContext(userStore);
// 결과 : {name: '홍길동', setName: ƒ}
console.log(userInfo);
const [age] = useState(22);
const handleOnClick = () => userInfo.setName("한석봉")
return <div>
<span>{`이름: ${userInfo.name} 나이: ${age} `}</span>
<button onClick={handleOnClick}>UpDate Name</button>
</div>
}
// UserAddress Component
const UserAddress = () => {
const userInfo = useContext(userStore);
const [address] = useState("seoul");
const handleOnClick = () => userInfo.setName("정약용")
return <div>
<span>{`이름은 ${userInfo.name} 주소: ${address} `}</span>
<button onClick={handleOnClick}>Update Name</button>
</div>
}
🔥 state를 전역변수로 사용할 수 있다.
// 기본값 설정
const userStore = createContext("unKnown");
const App = () => {
return <div>
{/* Provider를 제공하지 않음 */}
<UserAge />
<UserAddress />
</div>
}
const UserAge = () => {
const defaultValue = useContext(userStore);
// 결과 : unKnown
console.log(defaultValue);
return <div>{defaultValue}</div>
}
import React, { createContext, useContext, useState } from 'react';
// 스토어 생성
const userStore = createContext(null);
// App Component
const App = () => {
const [name, setName] = useState("홍길동");
return <div>
<userStore.Provider value={{ name, setName }}>
<UserAge />
<UserAddress />
</userStore.Provider>
</div>
}
// UserAge Component
const UserAge = () => {
const userInfo = useContext(userStore);
console.log(userInfo);
const [age] = useState(22);
const handleOnClick = () => userInfo.setName("한석봉")
return <div>
<span>{`이름: ${userInfo.name} 나이: ${age} `}</span>
<button onClick={handleOnClick}>UpDate Name</button>
</div>
}
// UserAddress Componet
const UserAddress = () => {
const userInfo = useContext(userStore);
const [address] = useState("seoul");
const handleOnClick = () => userInfo.setName("정약용")
return <div>
<span>{`이름은 ${userInfo.name} 주소: ${address} `}</span>
<button onClick={handleOnClick}>Update Name</button>
</div>
}
export default App;