부모 → 자식
의 형태로 어떤 정보를 전달하게 된다.<자식_컴포넌트 shared_props={shared_props} />;
({ shared_props }) => <손자_컴포넌트 shared_props={shared_props} />;
({ shared_props }) => <증손자_컴포넌트 shared_props={shared_props} />;
그렇기에 React는 이런 속성 전달의 번거로움을 덜고자 Context 메커니즘을 구현했다!
createContext API
로 생성된 객체는 Provider
, Consumer
를 가지게 된다그러나 우리는 함수형에서 사용할 것이기 때문에 Consumer는 신경쓰지 않아도 된다!😃
그러면 Consumer를 어떻게 대체하냐 → Custom Hook을 이용해서 이를 해결
ContextType
: 공유하려는 데이터 속성defaultContextValue
: 공유하려는 데이터 속성의 초기값SomeContext
: 만드려는 Contexttype ContextType = {
// 공유하려는 데이터 속성
};
const defaultContextValue: ContextType = {
// 공유하려는 데이터 속성 초기값
};
const SomeContext = createContext<ContextType>(defaultContextValue);
ToggleThemeProvider
라는 Context를 만들었다.여기서 알아보는 Provider의 특징
1.Provider 컴포넌트
는 다음처럼value
와children
속성이 존재하는
→ProviderProps
속성을 제공
2. 사용하려는타입 변수 : T
→ 위에서 설정한createContext<T>
와 같아야함interface ProviderProps<T> { value: T; children?: ReactNode; } ```
import React, { createContext, FC } from 'react';
export type ToggleThemeContextType = {}; // 공유하려는 데이터 속성
const defaultToggleThemeContext = {}; // 공유하려는 데이터 초기 값
const ToggleThemeContext = createContext<ToggleThemeContextType>(
defaultToggleThemeContext
);
type ToggleThemeContextProps = {}; // -1-
export const ToggleThemeProvider: FC<ToggleThemeContextProps> = ({
children,
}) => {
const value = {};
return (
// -2-
<ToggleThemeContext.Provider value={value}>
{children}
</ToggleThemeContext.Provider>
// -2-
);
};
ToggleThemeContextProps
에 대해서 빈 객체로 설정ProviderProps
에 설정된 children, value에 대한 명시Provider
컴포넌트의value
속성값을 얻을 목적으로 사용!!!
export const useToggleTheme = () => {
const value = useContext(ToggleThemeContext)
return value;
}
위 코드와 같은 방향으로 사용하게 된다.
type ToggleThemeContextPropps = {
toggleTheme: () => void;
}
export const ToggleThemeProvider: FC<ToggleThemeContextProps> = ({
const vluae = {
toggleTheme
}
return <ToggleThemeContext.Provider value={value}/>
})
createContext<T>(defaultValue)
export type ToggleThemeContextType = {
toggleTheme: () => void
}
const defaultToggleThemeContext = {
toggleTheme: () => {}
}
[리액트 네이티브 앱프로그래밍]-(전예홍)