๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿš€ Development/React Native

[React Native] context API๋ž€

by Jay Din 2023. 6. 15.
728x90
๋ฐ˜์‘ํ˜•
๋ฐ˜์‘ํ˜•

context API ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

React๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ Component๋งˆ๋‹ค ์ƒํƒœ๊ด€๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ๊ทœ๋ชจ๊ฐ€ ์ ์  ์ปค์ง€๊ณ  ๋ณต์žกํ•ด์งˆ์ˆ˜๋ก ์ปดํฌ๋„ŒํŠธ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ์ด ๋งŽ์•„์ง€๊ณ  ๋ณต์žกํ•ด์ง„๋‹ค.

์ƒํƒœ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ›จ์”ฌ ์‰ฝ๊ฒŒ ์ปดํฌ๋„ŒํŠธ ๊ฐ„์˜ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌ ํ•  ์ˆ˜ ์žˆ๋‹ค

 

Context API๋ž€?

๋ถ€๋ชจ๋ถ€ํ„ฐ ์ž์‹์—๊ฒŒ props๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜์ง€๋งŒ,

contex API๋ฅผ ์ด์šฉํ•˜๋ฉด ํŠธ๋ฆฌ ๋‹จ๊ณ„๋งˆ๋‹ค props๋ฅผ ๋„˜๊ฒจ์ฃผ์ง€ ์•Š์•„๋„ ์ปดํฌ๋„ŒํŠธ ํŠธ๋ฆฌ ์ „์ฒด์— ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค.

์–ธ์ œ Context API ์‚ฌ์šฉ ํ•˜๋Š”๊ฐ€?

Globalํ•˜๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ณ ์•ˆ๋œ ๋ฐฉ๋ฒ•์ด๊ธฐ ๋•Œ๋ฌธ์—,

๋น„์Šทํ•œ ๋ฐ์ดํ„ฐ๋กœ๋Š” ํ˜„์žฌ ๋กœ๊ทธ์ธํ•œ ์œ ์ €(๋กœ๊ทธ์ธ ๋ฐ์ดํ„ฐ), ํ…Œ๋งˆ, ์„ ํ˜ธํ•˜๋Š” ์–ธ์–ด ๋“ฑ์ด ์žˆ๋‹ค.

์ฃผ์˜ํ•  ์  

์ „์—ญ ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ ๊ณณ์—์„œ ์ €์žฅํ•˜๊ณ  ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ ‘๊ทผํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ์‚ฌ์šฉ์„ ์•ˆํ•˜๋Š” ๊ฒŒ ์ข‹๋‹ค.

๋ฌธ์„œ์— ๋”ฐ๋ฅด๋ฉด Context๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ๋Š” ํ•ด๋‹น Context๊ฐ€ ์—†์ด๋Š” ์žฌ์‚ฌ์šฉ์ด ์–ด๋ ค์›Œ์ง€๋ฏ€๋กœ ๊ผญ ํ•„์š”ํ•  ๋•Œ๋งŒ ์‚ฌ์šฉํ•˜๊ธธ ๊ถŒ์žฅํ•œ๋‹ค.

 

Context API ๊ธฐ๋ณธ ์ฝ”๋“œ ์˜ˆ์ œ

React.createContext(defaultValue)
> context ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ•จ์ˆ˜๋‹ค.
> createContextํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด Provider์™€ Consumer ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
> defaultValue๋Š” ์ดˆ๊ธฐ๊ฐ’์„ ๋งํ•œ๋‹ค.(Provider๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜์„ ๋•Œ ์ ์šฉ๋  ๊ฐ’)
Context.Provider
> context์˜ value๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
> Provider๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ์—๋Š” value๋ฅผ ๊ผญ ๋ช…์‹œํ•ด์ฃผ์–ด์•ผ๋งŒ ๋™์ž‘ํ•จ์œผ๋กœ ์ฃผ์˜ํ•œ๋‹ค.
> ์ „๋‹ฌ๋ฐ›๋Š” ์ปดํฌ๋„ŒํŠธ์˜ ์ˆ˜๋Š” ์ œํ•œ์ด ์—†๋‹ค.
Context.Consumer
> context ๋ณ€ํ™”๋ฅผ ๊ตฌ๋…ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งํ•œ๋‹ค.
> ์ด ํ•จ์ˆ˜(์ปดํฌ๋„ŒํŠธ)๊ฐ€ ๊ฐ€์ง€๋Š” context๊ฐ’์€ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด provider์˜ ๊ฐ’์ด๋‹ค.
> ์„ค์ •ํ•œ ๊ฐ’์„ ๋ถˆ๋Ÿฌ์™€์•ผ ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
> ์ƒ์œ„ provider๊ฐ€ ์—†๋‹ค๋ฉด createContext()์—์„œ ์ •์˜ํ•œ defaultValue๋ฅผ ๊ฐ€์ง„๋‹ค.
/**
create context api
use provider to add value
use consumer to use value
*/
import React, {Component} from "react";
import {View, Text, StyleSheet, Button} from 'react-native';

// context๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ผ์ผ์ด ํ†ตํ•˜์ง€ ์•Š๊ณ ๋„
// ์›ํ•˜๋Š” ๊ฐ’์„ ์ปดํฌ๋„ŒํŠธ ํŠธ๋ฆฌ ๊นŠ์ˆ™ํ•œ ๊ณณ๊นŒ์ง€ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
// ํ…Œ๋งˆ context์˜ ๊ธฐ๋ณธ๊ฐ’์„ default value๋กœ ๋งŒ๋“ ๋‹ค.
const Context = React.createContext("default value")

export default class App extends Component{
  render(){
    return(
      <View style={styles.container} >

// Context.Provider๋Š” Provider๋ฅผ ์ด์šฉํ•˜์—ฌ Context ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํ•˜์œ„ ํŠธ๋ฆฌ์— ์ œ๊ณตํ•œ๋‹ค.
// ์•„๋ž˜ ์˜ˆ์‹œ์—์„œ๋Š” parent value๋ฅผ ํ˜„์žฌ ์„ ํƒ๋œ context ๊ฐ’์œผ๋กœ ๋ณด๋‚ด๊ณ  ์žˆ๋‹ค.
// value๊ฐ€ parent value์ด ๊ธฐ ๋•Œ๋ฌธ์— provider๋ฅผ ์ด์šฉํ•ด ํ•˜์œ„ ํŠธ๋ฆฌ์— parent valueํ…Œ๋งˆ ๊ฐ’์„ ๋ณด๋‚ด์ค€๋‹ค.
    <Context.Provider value={"parent value"} >
        <Text style={styles.welcome}>
              Context Api React-Native</Text>
    <Child />
    </Context.Provider>
      </View>
    ); 
}}

class Child extends Component{
  render(){
    return(
      <View style={styles.container} >

// Context.Consumer๋ฅผ ํ†ตํ•ด ์„ค์ •ํ•œ ๊ฐ’์„ ๋ถˆ๋Ÿฌ์˜จ๋‹ค.
    <Context.Consumer>
      {value =><Text style={styles.child}>
                      Data is here: {value}</Text>}
    </Context.Consumer>
      </View>
    ); 
}}

const styles = StyleSheet.create({
  container:{
    flex:1,
    justifyContent:'center',
    alignItems:'center',
    backgroundColor:'#F5FCFF'
  },
  welcome:{
    fontSize: 25,
    textAlign: 'center',
    margin:10,
  },
  child:{
    fontSize: 18,
    textAlign: 'center',
    margin:10,
  },
});

context api ์‹คํ–‰ํ™”๋ฉด

๋ฐ˜์‘ํ˜•

 

728x90
๋ฐ˜์‘ํ˜•