WIL_21.11.28

μ΄μ„œν˜„Β·2021λ…„ 11μ›” 28일
0

ν•­ν•΄99

λͺ©λ‘ 보기
12/14
post-thumbnail

이전 κΈ€μ—μ„œ 라이프사이클에 λŒ€ν•΄ μž‘μ„± ν–ˆλ‹€
사이클이 μ–΄λ–»κ²Œ λŒμ•„κ°€λŠ”μ§€ 아직 μ΅μˆ™ν•˜μ§€ μ•ŠκΈ°μ—
ν•œ λˆˆμ— 확인이 κ°€λŠ₯ν•œ ν΄λž˜μŠ€ν˜•μœΌλ‘œ μž‘μ„±μ„ ν–ˆλ‹€

μ˜€λŠ˜μ€ ν•¨μˆ˜ μ»΄ν¬λ„ŒνŠΈμ—μ„œ 라이프사이클을 μ•Œμ•„λ³΄μž
클래슀 μ»΄ν¬λ„ŒνŠΈμ—μ„œ 라이프사이클을 λ©”μ†Œλ“œ λŒ€μ‹ 
ν•¨μˆ˜ μ»΄ν¬λ„ŒνŠΈμ—μ„œ 연동 ν•  수 있게 ν•΄μ£ΌλŠ” ν•¨μˆ˜κ°€ λ°”λ‘œ 훅이닀
(Hook은 class μ•ˆμ—μ„œλŠ” λ™μž‘X λŒ€μ‹  class 없이 Reactλ₯Ό μ‚¬μš©ν•  수 있게 ν•΄μ£ΌλŠ” 것)

Class 생λͺ…μ£ΌκΈ° λ©”μ„œλ“œλ₯Ό ν›…μœΌλ‘œ λŒ€μ‘ν•˜λŠ” 방법

  • constructor: ν•¨μˆ˜ μ»΄ν¬λ„ŒνŠΈλŠ” constructorκ°€ ν•„μš”ν•˜μ§€ μ•Šλ‹€
    useState ν˜ΈμΆœμ—μ„œ stateλ₯Ό μ΄ˆκΈ°ν™” ν•  수 μžˆλ‹€
  • shouldComponentUpdate: React.memo
  • render: 이것은 ν•¨μˆ˜ μ»΄ν¬λ„ŒνŠΈ 본체 자체
    -componentDidMount, componentDidUpdate, componentWillUnmount: useEffect Hook은 μ΄λ“€μ˜ λͺ¨λ“  쑰합을 ν‘œν˜„ κ°€λŠ₯

useState

const [state, setState] = useState(initialState);
  • μƒνƒœ μœ μ§€ κ°’κ³Ό κ·Έ 값을 κ°±μ‹ ν•˜λŠ” ν•¨μˆ˜λ₯Ό λ°˜ν™˜
  • 졜초둜 λ Œλ”λ§μ„ ν•˜λŠ” λ™μ•ˆ, λ°˜ν™˜λœ state(state)λŠ”
    첫 번째 μ „λ‹¬λœ 인자(initialState)의 κ°’κ³Ό κ°™λ‹€
  • setState ν•¨μˆ˜λŠ” stateλ₯Ό κ°±μ‹ ν•  λ•Œ μ‚¬μš©
    μƒˆ state 값을 λ°›μ•„ μ»΄ν¬λ„ŒνŠΈ λ¦¬λ Œλ”λ§μ„ 큐에 등둝

useEffect

κΈ°λ³Έ ν˜•νƒœ

useEffect(effect, [, deps]);

κ°„λ‹¨ν•œ μ‚¬μš© 예제
μ•„λž˜ μ½”λ“œλŠ” 클래슀 μ»΄ν¬λ„ŒνŠΈμΈλ°
졜초 λ Œλ”λ§ μ‹œμ—λ„ countλ₯Ό ν‘œμ‹œν•˜κ³  μ‹Άκ³ ,
μ—…λ°μ΄νŠΈλ  λ•Œμ—λ„ countλ₯Ό κ°±μ‹ ν•˜κ³  μ‹ΆμœΌλ©΄ 두 λ©”μ„œλ“œλ₯Ό λ‹€ μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.


class Example extends Component {
  constructor(props) {
    super(props);
    this.state = {
      count: 0
    };
  }
 
    componentDidMount() {
      document.title = `You clicked ${this.state.count} times`;
    }
 
  componentDidUpdate() {
    document.title = `You clicked ${this.state.count} times`;
  }
  render() {
    return (
      <div>
        <p>You clicked {this.state.count} times</p>
        <button onClick={() => this.setState({ count: this.state.count + 1 })}>
          Click Me
        </button>
      </div>
    );
  }
}class Example extends Component {
  constructor(props) {
    super(props);
    this.state = {
      count: 0
    };
  }
 
    componentDidMount() {
      document.title = `You clicked ${this.state.count} times`;
    }
 
  componentDidUpdate() {
    document.title = `You clicked ${this.state.count} times`;
  }
  render() {
    return (
      <div>
        <p>You clicked {this.state.count} times</p>
        <button onClick={() => this.setState({ count: this.state.count + 1 })}>
          Click Me
        </button>
      </div>
    );
  }
}

ν•˜μ§€λ§Œ! useEffectλ₯Ό μ‚¬μš©ν•˜λ©΄?

	import React, { useState, useEffect } from "react";
 
const Example = () => {
  const [count, setCount] = useState(0);
 
  useEffect(() => {
    document.title = `You clicked ${count} times`;
  });
 
  return (
    <div>
      <p>You clicked {count} times</p>
      <button onClick={() => setCount(count + 1)}>Click Me</button>
    </div>
  );
};
export default Example;

useEffectλ₯Ό μ‚¬μš©ν•˜λ©΄ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” μ½”λ“œλ₯Ό 쀑볡할 ν•„μš”κ°€ μ—†λ‹€

profile
πŸŒΏπŸ’»πŸ’ͺπŸ§ πŸ‘βœ¨πŸŽ‰

0개의 λŒ“κΈ€