일반적인 리액트 네이티브 애플리케이션의 경우 데이터는 부모 컴포넌트에서 자식 컴포넌트로 전달된다. 만약 데이터를 사용하는 컴포넌트가 많다면, 최상위 컴포넌트인 App 컴포넌트에서 상태를 관리하여 하위 컴포넌트 어디서 필요로 하든 전달할 수 있게 해야 한다.
// context를 생성하는 createContext 함수는 파라미터에 생성되는 context의 기본값을 지정할 수 있다.
const context = createContext(defaultValue);
Consumer
context의 내용을 읽고 사용한다. Consumer 컴포넌트는 상위 컴포넌트 중 가장 가까운 곳에 있는 provider 컴포넌트가 전달하는 데이터를 사용한다.
Provider
context에 있는 provider 컴포넌트는 하위 컴포넌트에 context의 변화를 알리는 역할을 합ㄴ다. provider 컴포넌트는 value를 받아서 모든 하위 컴포넌트에 전달하고, 하위 컴포넌트는 provider 컴포넌트의 value가 변경될 때마다 다시 렌더링된다.
//../components/User.jsx
import React from "react";
import styled from "styled-components/native";
import UserContext from "../contexts/User";
const StyledText = styled.Text`
font-size: 24px;
margin: 10px;
`;
const User = () => {
return (
<UserContext.Provider value={{ name: "react-native" }}>
<UserContext.Consumer>
{value => <StyledText>Name: {value.name}</StyledText>}
</UserContext.Consumer>
</UserContext.Provider>
);
};
export default User;
//src/App.jsx
import React from "react";
import styled from "styled-components/native";
import UserContext from "./contexts/User";
const Container = styled.View flex: 1; background-color: #ffffff; justify-content: center; align-items: center;
;
const App = () => {
return (
<UserContext.Provider value={{ name: "HyunDong" }}>
</UserContext.Provider>
);
};
export default App;