๋ฌธ์ ์ํฉ
React context ์ฌ์ฉ ์ ๊ธฐ์กด ์ฝ๋ ๊ตฌ์ฑ์ด context ๋ด๋ถ ์์๊ฐ ๋์ด๋ ์๋ก ๋ณต์กํด์ ธ์ ๋ฆฌํฉํ ๋งํ๋ ค ํ๋ค.
๊ธฐ์กด ๊ตฌํ
// ๊ตฌ์ฑ
const UserContext = createContext<userType>({});
const SignInContext = createContext<()=>void>(()=>{});
export const UserContextProvider = ({ children }) => {
const [user, setUser] = useState<userType>();
const signIn = () => {};
return (
<UserContext value={user}>
<SignInContext value={signIn}>
{children}
</SignInContext>
</UserContext>
);
}
export function useUserState() {
const context = useContext(UserContext);
return context;
}
export function useSignIn() {
const context = useContext(loginContext);
return context;
}
// ์ฌ์ฉ
const user = useUserState();
๊ธฐ์กด์ ์ฝ๋ ๊ตฌ์ฑ์ ์์ ๊ฐ์ด ํ์ํ ์์๋ค์ ๋ชจ๋ ํ๋์ Context๋ก ๋ฐ๋ก ๋ง๋ค์ด์ value๋ฅผ ํ ๋นํด์ฃผ๋ ํ์์ด์๊ณ , ์ด๋ ๊ฒ ํ๋ฉด context๋ฅผ ์ฌ์ฉํ ์ปดํฌ๋ํธ๊ฐ ํ์ํ ์์์๋ง ์ํฅ์ ๋ฐ๋๋ก ๊ตฌ์ฑํ ์ ์๋ค๊ณ ์๊ฐํ์๋ค.
์๋ฅผ ๋ค์ด, signIn์ ํ์ํ์ง ์๊ณ ์ค์ง user์ ์ ๋ณด๋ง ํ์ํ ์ปดํฌ๋ํธ๊ฐ ์๋ค๋ฉด signIn์ ๋ณํ์ ๋ฐ๋ผ ๋ฆฌ๋ ๋๋ง๋ ํ์๊ฐ ์์ผ๋ฏ๋ก ํ์ํ context๋ก๋ง ๊ฐ์ธ์ฃผ๋ฉด ๋๋ค๊ณ ์๊ฐํ ๊ฒ์ด๋ค.
ํ์ง๋ง ์ค์ ๋ก๋ ํด๋น ๋ฐ์ดํฐ๋ค์ด ์์ ๋ถ๋ฆฌ๋์ด์๋ ๊ฒ์ด ์๋๋ค. signIn์ api๋ฅผ ํธ์ถํ๊ณ ๋์ userContext๋ฅผ ๊ฐฑ์ ํด์ฃผ์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ๊ฒฐ๊ตญ signIn๋ง์ ์ฌ์ฉํ๋ ์ปดํฌ๋ํธ๋ user์ ๊ฒฐํฉํ๊ณ ์๋ค.
์ด์ฐจํผ ๊ด๋ จ๋ ๋ชจ๋ ์์์ ์ํด ๋ฆฌ๋ ๋๋ง ๋๋ค๊ณ ํ๋ฉด ์ฝ๋๋ฅผ ๊ฐ๋จํ๊ฒ ๋ง๋ค ์ ์์ ๊ฒ ๊ฐ๋ค.
๊ฐ์ ์ฝ๋
// ๊ตฌ์ฑ
export interface UserContextType {
signIn?: () => void,
user? : userType | null,
}
const UserContext = createContext<UserContextType>({});
export const UserContextProvider: React.FC = ({ children }) => {
const [user, setUser] = useState<userType>();
const signIn = () => {};
return (
<UserContext.Provider
value={{
signIn,
user,
}}
>
{children}
</UserContext.Provider>
);
};
export const useUserContext = () => {
const userContext = useContext(UserContext);
return userContext;
};
// ์ฌ์ฉ
const {user, signIn} = useUserState();
์์ ๊ฐ์ ๋ฐฉ์์ Context๋ฅผ ๋ถ๋ฆฌํ์ง ์๊ณ ํ๋์ object๋ก ๋๊ฒจ์ฃผ๋ ๋ฐฉ์์ด๋ค. ์ด๋ฐ ๋ฐฉ์์ VSCode์ ๊ฐ์ ํด์์ ํด๋น ํจ์๋ฅผ ์ฐธ์กฐํ๋ ๋ถ๋ถ์ผ๋ก ์ด๋ํ๋ ๊ธฐ๋ฅ์ ์ธ ์ ์๋ค๋ ๋จ์ ์ด ์๋ค.
๊ฒฐ๋ก
Lighthouse ์ธก์ ๊ฒฐ๊ณผ context ์ฐจ์ด์ ๋ฐ๋ฅธ ํฐ ์ฑ๋ฅ ๋ณํ๋ ์์๋ค. ๊ฐ๋จํ ์ฝ๋ ์์ฑ์ ์ํด object ํ์์ผ๋ก Context๋ฅผ ๊ตฌ์ฑํ๊ธฐ๋ก ํ์.
'์น (WEB) > ๊ณต๋ถ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Javascript ๊ธฐ๋ณธ :: declare (Typescript์์ type ์์ ๋) (4) | 2021.09.22 |
---|---|
CommonJS vs ES Modules (0) | 2021.09.22 |
๋ฅ๋งํฌ, ์ฑ๋งํฌ, ์ ๋๋ฒ์ ๋งํฌ? :: ๋ฌด์กฐ๊ฑด ์ฑ์ผ๋ก ์ฐ๋๋๋ ์ํฉ ํด๊ฒฐ (0) | 2021.09.01 |
์๋น์ค์ ์๋๋ฅผ ๋น ๋ฅด๊ฒ :: ์ด๋ฏธ์ง ์ต์ ํ (2) | 2021.08.29 |
์ธ์ฆ ๋ฐฉ์ :: ๊ธฐ๋ณธ ์ธ์ฆ ์๋ฆฌ๋ถํฐ MSA ์ธ์ฆ๊น์ง (0) | 2021.07.22 |
Comment