| 리액트네이티브에서는 부모에서 자식으로 데이터 전달할때 props를 이용한다. 글로벌이나 전체 공유할수 있는 방법이 없을까? 이때 사용하는 컴포넌트가 CreateContext이다. 🧩 CreateContext란? 리액트네이티브에서 CreateContext는 "공유 상자"를 만드는 도구이다. Context 객체를 반환한다. 🧩 Provider란? 데이터 공급자(Data Provider)로 Context에 값을 넣는다. value라는 prop을 통해 공유할 데이터를 지정하고 하위 컴포넌트 어디서든 접근 가능하다.. 🧩 useContext와 Consumer란? useContext와 Consumer를 통해 Context 데이터에 접근하여 가져 올수 있다. 간단한 예제1)User.jsimport { createContext } from 'react';
const UserContext = createContext({ name: 'gildong Hong' }) export default UserContext; userContext 사용 : App.js 파일 import React, { useContext } from 'react';
import { View, Text } from 'react-native'; import UserContext from './User'; export default function App() { const user = useContext(UserContext); return (<Text>마이 이름: {user.name}</Text>); } Consumer 사용 App.js 파일 import React, { useContext } from 'react';
import { View, Text } from 'react-native'; import UserContext from './User'; export default function App() { return ( <UserContext.Consumer> { value => <Text>마이 이름: {value.name}</Text> } </UserContext.Consumer> ); } User.js 파일을 다음과 같이 여러군데서 호출 하더라도 createContext 컴포넌트는 한번만 생성이 되고 UserContext를 반환한다. const user = useContext(UserContext); 간단한 예제2)Provider 래퍼 컴포넌트는 진짜 자주 쓰이니까 이 패턴 잘 기억해 두면 나중에 Context 쓸 때 완전 편해질것 같다.Cafeteria.js에서 children으로 넘겨서 Provider로 감싸는 패턴은 기억하자. FoodContext.js 파일 import React from 'react';
const FoodContext = React.createContext(); export default FoodContext; Cafeteria.js 파일 import React from 'react';
import FoodContext from './FoodContext'; function Cafeteria({ children }) { return ( <FoodContext.Provider value="김치볶음밥"> {children} </FoodContext.Provider> ); } export default Cafeteria; Student.js 파일 import React, { useContext } from 'react';
import { Text } from 'react-native'; import FoodContext from './FoodContext'; function Student() { const food = useContext(FoodContext); return <Text>오늘 급식은 {food}!</Text>; } export default Student; App.js 파일 import React from 'react';
import { View } from 'react-native'; import Cafeteria from './Cafeteria'; import Student from './Student'; export default function App() { return ( <Cafeteria> <View> <Student /> </View> </Cafeteria> ); } Cafeteria 컴포넌트의 children이름은 아무거나 사용해도 엘리먼트 자식들로 넘어온다. children이름은 관습이다. 다른 이름 사용해도 됨. 옛날 리액트네이티브에서는 props.children로 이름이 고정되어 있었다. function
Wrapper(props) { |