Input + Output = True

๋ฆฌ์•กํŠธ ๋ผ์ดํ”„์‚ฌ์ดํด(ํด๋ž˜์Šคํ˜• vs ํ•จ์ˆ˜ํ˜•), React hooks ๋ณธ๋ฌธ

๐ŸŽจFrontEnd/React

๋ฆฌ์•กํŠธ ๋ผ์ดํ”„์‚ฌ์ดํด(ํด๋ž˜์Šคํ˜• vs ํ•จ์ˆ˜ํ˜•), React hooks

IOTrue 2023. 1. 8. 18:08

๐Ÿ˜Ž ๋ผ์ดํ”„์‚ฌ์ดํด(ํด๋ž˜์Šคํ˜• vs ํ•จ์ˆ˜ํ˜•),  React hooks

โœ… ๋ผ์ดํ”„์‚ฌ์ดํด(ํด๋ž˜์Šคํ˜• vs ํ•จ์ˆ˜ํ˜•) 

 

React LifeCycle

 

๋ผ์ดํ”„์‚ฌ์ดํด(LifeCycle)
๋ฆฌ์•กํŠธ์˜ ์ปดํฌ๋„ŒํŠธ๋“ค์€ ๋ผ์ดํ”„์‚ฌ์ดํด(์ƒ๋ช…์ฃผ๊ธฐ)์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
๋ผ์ดํ”„์‚ฌ์ดํด์€ ์ปดํฌ๋„ŒํŠธ์˜ ์ƒ์„ฑ๋ถ€ํ„ฐ ์—…๋ฐ์ดํŠธ, ๊ทธ๋ฆฌ๊ณ  ์†Œ๋ฉธ(์ œ๊ฑฐ)๋˜๋Š” ๊ณผ์ •์„ ์˜๋ฏธํ•œ๋‹ค.

 

ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ : ๋ผ์ดํ”„์‚ฌ์ดํด ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด์„œ ํ•ด๋‹น ์‹œ์ ์— ๋”ฐ๋ผ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์กฐ์ž‘ํ•œ๋‹ค.
ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ : ๋ผ์ดํ”„์‚ฌ์ดํด ๋ฉ”์„œ๋“œ๊ฐ€ ๋”ฐ๋กœ ์กด์žฌํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—
                              ๋ฆฌ์•กํŠธ ํ›…์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ผ์ดํ”„์‚ฌ์ดํด ๋ฉ”์„œ๋“œ์™€ ๋น„์Šทํ•˜๊ฒŒ ๋™์ž‘ํ•˜๋„๋ก ๊ตฌํ˜„ํ•œ๋‹ค.

 

๋ผ์ดํ”„์‚ฌ์ดํด์€ ํฌ๊ฒŒ ์„ธ ๋‹จ๊ณ„๋กœ ๋‚˜๋ˆ ์ง„๋‹ค.

์ƒ์„ฑ(Mount), ์—…๋ฐ์ดํŠธ(Update), ์ œ๊ฑฐ(Unmount)

  • Mount: ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋‹จ๊ณ„
  • Update: ์•„๋ž˜ 5๊ฐ€์ง€ ๊ฒฝ์šฐ๋กœ ์ธํ•ด ์—…๋ฐ์ดํŠธ ๋œ๋‹ค(๋ฆฌ์•กํŠธ ๋ฆฌ๋ Œ๋”๋ง ๋ฐœ์ƒ ์กฐ๊ฑด)
state์˜ ๋ณ€๊ฒฝ
setState ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด
๋ฆฌ์•กํŠธ๋Š” ๋ณ€๊ฒฝ์„ ๊ฐ์ง€ํ•˜๊ณ  ๋ฆฌ๋ Œ๋”๋ง ํ•œ๋‹ค. (์–•์€ ๋ณต์‚ฌ๋ฅผ ํ†ตํ•œ ๋น„๊ต)

์ƒˆ๋กœ์šด props์˜ ์ „๋‹ฌ
์ „๋‹ฌ๋ฐ›์€ props ๊ฐ’์ด ์—…๋ฐ์ดํŠธ ๋˜๋ฉด ๋ฆฌ๋ Œ๋”๋ง์„ ํ•จ

๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์˜ ๋ Œ๋”๋ง
๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฆฌ๋ Œ๋”๋ง ๋˜๋ฉด ์ž์‹ ์ปดํฌ๋„ŒํŠธ๋„ ํ•จ๊ป˜ ๋ฆฌ๋ Œ๋”๋ง ๋จ

forceUpdate()์˜ ์‹คํ–‰
๋ฆฌ๋ Œ๋”๋ง์„ ํ•˜๊ณ  ์‹ถ์„ ๊ฒฝ์šฐ ์‚ฌ์šฉํ• ์ˆ˜ ์žˆ๋Š” ๋ฉ”์„œ๋“œ (๊ฐ•์ œ ๋ฆฌ๋ Œ๋”๋ง)

shouldComponentUpdate์—์„œ true๊ฐ€ ๋ฐ˜ํ™˜๋  ๋•Œ
๊ฐ๊ฐ์˜ ์ปดํฌ๋„ŒํŠธ๋Š” shouldComponentUpdate ๋ผ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ 
state์˜ ๋ณ€๊ฒฝ ๋˜๋Š” ์ƒˆ๋กœ์šด props๋ฅผ ์ „๋‹ฌ ๋ฐ›๋Š” ๊ฒฝ์šฐ ์‹คํ–‰๋œ๋‹ค.
์ด๋•Œ ๊ธฐ๋ณธ์ ์œผ๋กœ return ๊ฐ’์€ true ๊ฐ€ ๋˜์–ด ๋ Œ๋”๋ง์ด ์‹œ์ž‘๋˜๊ณ ,
๋ฆฌ๋ Œ๋”๋ง์ด ํ•„์š”ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ return value = false๋กœ ์ง€์ •ํ•ด์„œ ๋ฆฌ๋ Œ๋”๋ง์„ ๋ง‰์„ ์ˆ˜ ์žˆ๋‹ค

 

  • Unmount: ํŽ˜์ด์ง€๋ฅผ ์ด๋™ํ•˜๊ฑฐ๋‚˜, ์‚ฌ์šฉ์ž์˜ ํ–‰๋™์œผ๋กœ ์ธํ•ด ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ™”๋ฉด์—์„œ ์‚ฌ๋ผ์ง€๋Š” ๋‹จ๊ณ„

 

๋ฆฌ์•กํŠธ์˜ ์ปดํฌ๋„ŒํŠธ๋“ค์€ ์œ„ ์ˆœ์„œ์— ๋”ฐ๋ผ ์ƒ์„ฑ, ์—…๋ฐ์ดํŠธ, ์ œ๊ฑฐ์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ฐ–๋Š”๋‹ค.

์ด์ œ ํด๋ž˜์Šคํ˜•๊ณผ ํ•จ์ˆ˜ํ˜•์˜ ๋ผ์ดํ”„์‚ฌ์ดํด ๋ฉ”์„œ๋“œ ์ฐจ์ด๋ฅผ ์•Œ์•„๋ณด์ž.

 

์ปดํฌ๋„ŒํŠธ ์ •์˜

1.constructor

์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ ๋ฉ”์†Œ๋“œ๋กœ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด ์ œ์ผ ๋จผ์ € ์‹คํ–‰๋œ๋‹ค.

์ดˆ๊ธฐ state๋ฅผ ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ

class Example extends React.Component {
    constructor(props) {
        super(props);
        this.state = { number: 0 };
}

 

ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ(useState hook ์‚ฌ์šฉ)

const Example = () => {
    const [number, setNumber] = useState(0);
}

 

2.render

์ปดํฌ๋„ŒํŠธ ๋ Œ๋”๋ง ๋ฉ”์†Œ๋“œ.

 

 

ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ

class Welcome extends React.Component {
  render() {
    return <h1>Hello, {this.props.name}</h1>;
  }
}

 

ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ(render๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ปดํฌ๋„ŒํŠธ ๋ Œ๋”๋ง ๊ฐ€๋Šฅ)

function Welcome(props) {
  return <h1>Hello, {props.name}</h1>;
}

 

3. componentDidMount

์ฒ˜์Œ ๋ Œ๋”๋ง์ด ๋๋‚˜๋ฉด ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์„œ๋“œ๋กœ, ํ˜„์žฌ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ™”๋ฉด์— ๊ทธ๋ ค์ง„ ์ƒํƒœ๋‹ค.
์—ฌ๊ธฐ์—์„œ ๊ฐ์ข… ํ•จ์ˆ˜ ํ˜ธ์ถœ, ajax ์š”์ฒญ, ์ด๋ฒคํŠธ ๋“ฑ๋ก ๋“ฑ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

 

ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ

class Example extends React.Component {
    componentDidMount() {
        ...
    }
}

 

ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ

useEffect hook์„ ์‚ฌ์šฉํ•ด์„œ

componentDidMount, componentDidUpdate, componentDidUnmount๊นŒ์ง€ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ.

const Example = () => {
    useEffect(() => {
        ...
    }, [] );  //์˜์กด์„ฑ ๋ฐฐ์—ด
}

 

4. componentDidUpdate

๋ฆฌ๋ Œ๋”๋ง์„ ์™„๋ฃŒํ•œ ํ›„ ์‹คํ–‰ํ•˜๋Š” ๋ฉ”์†Œ๋“œ.

์—…๋ฐ์ดํŠธ๊ฐ€ ๋๋‚œ ์งํ›„๋ผ์„œ DOM๊ด€๋ จ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋งค๊ฐœ๋ณ€์ˆ˜๋กœ prevProps์™€ prevState๊ฐ€ ์žˆ๊ณ , ๊ฐ๊ฐ ์—…๋ฐ์ดํŠธ ๋˜๊ธฐ ์ „ props, state๋‹ค.

 

 

ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ

class Example extends React.Component {
    componentDidUpdate(prevProps, prevState) {
        ...
    }
}

 

ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ(useEffect ์˜์กด์„ฑ ๋ฐฐ์—ด์— ๊ฐ’ ์ถ”๊ฐ€)

const Example = () => {
    useEffect(() => {
        ...
    }, [data] );  //์˜์กด์„ฑ ๋ฐฐ์—ด์— ๋“ฑ๋ก๋œ ๊ฐ’์ด ๋ณ€๊ฒฝ๋  ๋•Œ ๋งˆ๋‹ค ๋ฆฌ๋ Œ๋”๋ง
}

 

5. componentDidUnmount

์ปดํฌ๋„ŒํŠธ๋ฅผ DOM์—์„œ ์ œ๊ฑฐํ•  ๋•Œ ์‹คํ–‰ํ•˜๋Š” ๋ฉ”์†Œ๋“œ.( ex) removeEventListener )

๋งŒ์•ฝ setTimeout ์„ ์‹คํ–‰ํ–ˆ๋‹ค๋ฉด clearTimeout ์„ ์‹คํ–‰ํ•ด์„œ ์ œ๊ฑฐํ•œ๋‹ค.

 

ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ

class Example extends React.Component {
    coomponentWillUnmount() {
        ...
    }
}

 

ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ

useEffect()์˜ return ๋ถ€๋ถ„์— Unmount ๊ณผ์ •์—์„œ ์ •๋ฆฌํ•  ๋ฉ”์„œ๋“œ(cleanUp ๋ฉ”์„œ๋“œ)๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.

const Example = () => {
    useEffect(() => {
        return () => {
            ...
        }
    }, []);
}

 

ํ˜„์žฌ๋Š” ํ•จ์ˆ˜ํ˜• ๋ฐฉ์‹์ด ๋” ๋งŽ์ด ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๊ณ , ๋ฆฌ์•กํŠธ ๊ณต์‹๋ฌธ์„œ์—์„œ๋„ ํ•จ์ˆ˜ํ˜• ๋ฐฉ์‹์„ ๊ถŒ์žฅํ•˜๊ณ  ์žˆ๋‹ค.

๋ผ์ดํ”„์‚ฌ์ดํด ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒŒ ํ•จ์ˆ˜ํ˜• ๋ฐฉ์‹์˜ ๋‹จ์ ์ด์—ˆ๋Š”๋ฐ

๋ฆฌ์•กํŠธ 16.8๋ฒ„์ „๋ถ€ํ„ฐ hooks๋ฅผ ํ†ตํ•ด ์ด๋ฅผ ๋ณด์™„ํ–ˆ๊ณ , ํด๋ž˜์Šคํ˜• ๋ฐฉ์‹๋ณด๋‹ค ์ฝ”๋“œ ๊ฐ„๊ฒฐ์„ฑ์ด ๋” ์ข‹๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

ํ•˜์ง€๋งŒ ๋ฆฌ์•กํŠธ ์ž‘๋™ ๋ฐฉ์‹์˜ ์ดํ•ด์™€ ๊ธฐ์กด ํด๋ž˜์Šคํ˜• ๋ฐฉ์‹์œผ๋กœ ์ž‘์„ฑ๋œ ์ฝ”๋“œ๋“ค์„

์œ ์ง€๋ณด์ˆ˜ ํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์•Œ์•„๋‘๋ฉด ๋„์›€๋˜๋Š” ๋‚ด์šฉ์ด๋‹ค.

 

 

โœ… React Hooks

React Hook
React ๋ฒ„์ „ 16.8๋ถ€ํ„ฐ React ์š”์†Œ๋กœ ์ƒˆ๋กœ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
๊ธฐ์กด Class ๋ฐ”ํƒ•์˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ํ•„์š” ์—†์ด ์ƒํƒœ ๊ฐ’๊ณผ ์—ฌ๋Ÿฌ React์˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
-๋ฆฌ์•กํŠธ-

 

๋ฆฌ์•กํŠธ ํ›…์„ ์‚ฌ์šฉํ•˜๋ฉด ์œ„์—์„œ ์„ค๋ช…ํ–ˆ๋˜ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๊ฐ€๋Šฅํ•ด์ง€๋Š” ๊ฒƒ์ด๋‹ค.

ํ•จ์ˆ˜ํ˜• ๋ฐฉ์‹์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

React Hook ๊ทœ์น™

์ตœ์ƒ์œ„(at the Top Level)์—์„œ๋งŒ Hook์„ ํ˜ธ์ถœํ•  ๊ฒƒ.
๋ฐ˜๋ณต๋ฌธ, ์กฐ๊ฑด๋ฌธ ํ˜น์€ ์ค‘์ฒฉ๋œ ํ•จ์ˆ˜ ๋‚ด์—์„œ Hook์„ ํ˜ธ์ถœํ•˜๋ฉด ์•ˆ๋˜๊ณ 

ํ•ญ์ƒ React ํ•จ์ˆ˜์˜ ์ตœ์ƒ์œ„(at the top level)์—์„œ return์ด ์‹คํ–‰๋˜๊ธฐ ์ „์— Hook์„ ํ˜ธ์ถœํ•ด์•ผ ํ•œ๋‹ค.

์ด ๊ทœ์น™์„ ๋”ฐ๋ฅด๋ฉด ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ Œ๋”๋ง ๋  ๋•Œ๋งˆ๋‹ค ํ•ญ์ƒ ๋™์ผํ•œ ์ˆœ์„œ์˜ Hook ํ˜ธ์ถœ์ด ๋ณด์žฅ๋œ๋‹ค.

์ด๋Ÿฌํ•œ ์ ์€ React๊ฐ€ useState์™€ useEffect๊ฐ€ ์—ฌ๋Ÿฌ ๋ฒˆ ํ˜ธ์ถœ๋˜๋Š” ์ค‘์—๋„

Hook์˜ ์ƒํƒœ๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค.

 

 

React ํ•จ์ˆ˜ ๋‚ด์—์„œ๋งŒ Hook์„ ํ˜ธ์ถœํ•  ๊ฒƒ.
Hook์„ ์ผ๋ฐ˜์ ์ธ JavaScript ํ•จ์ˆ˜์—์„œ ํ˜ธ์ถœํ•˜๋ฉด ์•ˆ ๋˜๊ณ  ์•„๋ž˜์™€ ๊ฐ™์ด ํ˜ธ์ถœํ•ด์•ผ ํ•œ๋‹ค.
  - React ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ์—์„œ ํ˜ธ์ถœ
  - Custom Hook์—์„œ ํ˜ธ์ถœ.

์ด ๊ทœ์น™์„ ์ง€ํ‚ค๋ฉด ์ปดํฌ๋„ŒํŠธ์˜ ๋ชจ๋“  ์ƒํƒœ ๊ด€๋ จ ๋กœ์ง์„ ์†Œ์Šค์ฝ”๋“œ์—์„œ ๋ช…ํ™•ํ•˜๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” React Hook

1. useState : ์ƒํƒœ ๊ด€๋ฆฌ

2. useEffect : ๋ผ์ดํ”„์‚ฌ์ดํด ๋ฉ”์†Œ๋“œ์ฒ˜๋Ÿผ ์‚ฌ์šฉ

3. useRef : ํŠน์ • DOM์— ์ ‘๊ทผ

์ด ์™ธ์— useMemo, useCallback ๋“ฑ์ด ์žˆ๋‹ค.

 

 

 

โ— ๊ฒฐ๋ก 

๋ฆฌ์•กํŠธ ์ž‘๋™ ๋ฐฉ์‹์˜ ํ๋ฆ„์„ ์•Œ๊ธฐ ์œ„ํ•ด ๋ผ์ดํ”„์‚ฌ์ดํด์„ ๊ณต๋ถ€ํ•˜๊ณ ,

๋ฆฌ์•กํŠธ๋Š” ํ˜„์žฌ ๊ณต์‹์ ์œผ๋กœ ํ•จ์ˆ˜ํ˜• ๋ฐฉ์‹์„ ๊ถŒ์žฅํ•˜๊ณ  ์žˆ์œผ๋‹ˆ

ํ•จ์ˆ˜ํ˜• ๋ฐฉ์‹์œผ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๊ณ ,

์ด๊ฒƒ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ๋ฆฌ์•กํŠธ ํ›… ์„ ์ž˜ ์‚ฌ์šฉํ•˜์ž!

 

 

 

ํ›…

 

 

 

 

์ฐธ๊ณ 

https://ko.reactjs.org/docs/state-and-lifecycle.html

https://ko.reactjs.org/docs/hooks-reference.html

 

 

 

Comments