타닥타닥 개발자의 일상

react / TextProvider, useContext 통해서 다른 파일에 있는 값 화면에 구현하기 본문

코딩 기록/react

react / TextProvider, useContext 통해서 다른 파일에 있는 값 화면에 구현하기

NomadHaven 2022. 3. 9. 00:22

 

생성문
npx react-native init sample24 --template react-native-template-typescript

 

생성파일

src 폴더 생성 > 그 안에 component 폴더 생성 >

component폴더안에 CountProvider, First, Second, Third, TextProvider 타입 스크립트 파일 생성

 

TextProvider.tsx
import React, { createContext } from "react";
import { Text } from "react-native";

export const TextContext = createContext({})

interface Props{
    children: JSX.Element

}

export default function TextProvider({ children }:Props){

    const text = "이것은 전달한 값입니다."

    //매개변수 children에 text값을 전달
    return(
        <TextContext.Provider value={text}>
            {children}
        </TextContext.Provider>
    )



}

 

CountProvider.tsx
import React, { createContext, useState } from "react";
import { Text } from "react-native";

export const CountContext = createContext({})

interface Props{
    children: JSX.Element

}

export const CountProvider = ({ children }:Props)=>{

    const [count, setcount] = useState(0)

    return(
        <CountContext.Provider value={[count, setcount]}>
            {children}
        </CountContext.Provider>
    )



}

 

 

Third.tsx
import React, { useContext } from "react";
import { Text, View, Button } from "react-native";
import { CountContext } from "./CountProvider";
import { TextContext } from "./TextProvider";



export default function Third(){

    const [count,setCount]:any = useContext(CountContext)

    const btnClick = () =>{
        setCount( (pcount:any) => pcount+1 )
    }

    return(
        <View>
            <Text>Third Component: 현재 카운트 : {count}</Text>
            <Button title="+1증가" onPress={btnClick}/>
        </View>        
    )

}

 

 

Second.tsx

 

import React, { useContext } from "react";
import { Text, View } from "react-native";
import Third from "./Third";


export default function Second(){
 

    return (
        
        <View>
            <Text>Second Component</Text>
            <Third/>
        </View>
    )

}

 

 

First.tsx
import React, { useContext } from "react";
import { Text, TextComponent, View } from "react-native";
import Second from "./Second";
import TextProvider, { TextContext } from "./TextProvider";

export default function First(){

    return (
           <View>
               <Text>First Component</Text>
                 <Second/>
             </View>
         )


}

 

 

 

App.tsx
import React, { createContext, useContext } from "react";
import { Text, View } from "react-native";
import { CountProvider } from "./src/component/CountProvider";
import First from "./src/component/First";
import TextProvider from "./src/component/TextProvider";

/*
useContext, creatContext
:값 넘기기
*/



export default function App(){


  return(
    <View>
    <CountProvider>
        <First/>
    </CountProvider>
    </View>
  )


}

Second.tsx가 Third.tsx를 전달받고 First.tsx가 Second.tsx를 전달받음

따라서 App.tsx에서 First만 전달받아도 Third,Second의 값을 모두 받을수 있다.

 

 

실행화면

버튼 누르면 숫자가 증가한다.

 

아이콘 정보 사이트



https://ionic.io/ionicons

 

Ionicons: The premium icon pack for Ionic Framework

Ionicons is an open-sourced and MIT licensed icon pack.

ionic.io

 

Comments