context

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

context๋กœ ์ ์ ˆํ•œ ๋ฐ์ดํ„ฐ ๋กœ๊ทธ์ธํ•œ ์œ ์ €, ํ…Œ๋งˆ, ์–ธ์–ด ์„ค์ •

context๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ค‘๊ฐ„์— ์žˆ๋Š” ์—˜๋ฆฌ๋จผํŠธ๋“ค์—๊ฒŒ props๋ฅผ ๋„˜๊ฒจ์ฃผ์ง€ ์•Š์•„๋„ ๋œ๋‹ค. ์›ํ•˜๋Š” ๊ฐ’์„ ์ปดํฌ๋„ŒํŠธ ํŠธ๋ฆฌ ๊นŠ์ˆ™ํ•œ ๊ณณ๊นŒ์ง€ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

context ๋งŒ๋“ค๊ธฐ

const ThemeContext = React.createContext('light');

context๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ผ์ผ์ด ํ†ตํ•˜์ง€ ์•Š๊ณ ๋„ ์›ํ•˜๋Š” ๊ฐ’์„ ์ปดํฌ๋„ŒํŠธ ํŠธ๋ฆฌ ๊นŠ์ˆ™ํ•œ ๊ณณ๊นŒ์ง€ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

light๋ฅผ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ํ•˜๋Š” ํ…Œ๋งˆ context๋ฅผ ๋งŒ๋“ฌ

์‚ฌ์šฉ

class App extends React.component {
  render() {
    return (
      <ThemeContext.Provider value="dark">
        <Toolbar />
      </ThemeContext.Provider>
    )
  }
}

Provider๋ฅผ ์ด์šฉํ•ด ํ•˜์œ„ ํŠธ๋ฆฌ์— ํ…Œ๋งˆ ๊ฐ’์„ ๋ณด๋‚ด์ค€๋‹ค. ์•„๋ฌด๋ฆฌ ๊นŠ์ˆ™ํžˆ ์žˆ์–ด๋„, ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ด ๊ฐ’์„ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค.

const Tool = (props) => (
    <div>
      <ThemedButton />
  </div>
)

App์˜ ์ค‘๊ฐ„์— ์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ Toolbar๋Š” ์ผ์ผ์ด ํ…Œ๋งˆ๋ฅผ ๋„˜๊ฒจ์ค„ ํ•„์š”๊ฐ€ ์—†๋‹ค.

class ThemedButton extends React.Component {
  static contextType = ThemContext;
  render() {
    return <Button theme={this.context} />
  }
}

ํ˜„์žฌ ์„ ํƒ๋œ ํ…Œ๋งˆ๋ฅผ ์ฝ๊ธฐ ์œ„ํ•ด contextType ์ง€์ • React๋Š” ๊ฐ€์žฅ ๊ฐ€๊นŒ์ด ์žˆ๋Š” ํ…Œ๋งˆ Provider๋ฅผ ์ฐพ์•„ ๊ทธ ๊ฐ’์„ ์‚ฌ์šฉํ•œ๋‹ค.

Context๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๊ณ ๋ คํ•  ๊ฒƒ context๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ปดํฌ๋„ŒํŠธ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ๊ฐ€ ์–ด๋ ค์›Œ์ง„๋‹ค.

์—ฌ๋Ÿฌ level์„ ๊ฑธ์ณ props๋ฅผ ๋„˜๊ธฐ๋Š” ๊ฑธ ๋Œ€์ฒดํ•˜๋Š” ๋ฐ์— context๋ณด๋‹ค ์ปดํฌ๋„ŒํŠธ ํ•ฉ์„ฑ์ด ๋” ๊ฐ„๋‹จํ•œ ํ•ด๊ฒฐ์ฑ…์ด๋‹ค.

Last updated

Was this helpful?