React - Hooks: useState, useEffect - Practice number increase, decrease

화이티 ·2023년 12월 19일
0

react

목록 보기
6/11

Increase, decrease

import React, { Component } from 'react'

/**
 * - class component 단축키: rcc +enter
 * - 
 */

export default class Ex13 extends Component {

    constructor(props){

        /**생성자 함수: 가장 먼저 실행되는 공간
         * state값, 변수값, 초기화하는 공간
         * super(props)와 함께 사용하는 것을 권고라고 있음
         * 밑에서 this문법 사용 시 생성자 내에서 정의되지 않아 버그 발생
         */
        super(props);
        this.state = {counter : 0 };
        this.handleIncrement = this.handleIncrement.bind(this);
        this.handleDecrement = this.handleDecrement.bind(this);
    }
    handleIncrement(){
        console.log('handleIncrement function');
        this.setState({
            counter : this.state.counter += 1 
        });
    }
    handleDecrement(){
        console.log('handleDecrement function');
        this.setState({
            counter : this.state.counter -= 1 
        });
    }
  render() {
    return (
      <div>
        <h1>Class counter : {this.state.counter}</h1>
        <button onClick={this.handleIncrement}>+</button>
        <button onClick={this.handleDecrement}>-</button>
      </div>
    )
  }
}

Increase

import React, {useEffect, useState} from 'react'

const Ex14 = () => {

    /**
     * classComponent에서는 시점을 지정할 수 있는 life cycle이라는 게 존재 (ex13.jsx)
     * => function component에서는 사용이 불가능
     * 대체 사용이 가능한 홋 useEffect를 사용
     * 1. useEffect(함수, [])
     * componetnDidAmoutn를 대체
     * UI 세팅이 완료되어 dom 에 접근 가능
     * api call
     * 주의사항
     * -> 비어있더라도 array는 꼭 적어줘야함
     * 2. useEffect (함수, [state])
     * componentDidUpdate를 대체
     * array 안에 있는 값이 갱신된 직후에 호춯
     * 최초 랜더링 때 한번 호출
     * 변화를 감지할 대상은 복수가 될 수도 있다.
     */

console.log('1. constructor를 대체하는 함수 초기화');
useEffect(()=>{
    console.log('3. 화면 render 끝');
},[]);

    const [num,setNum] = useState(0);
const btnCk = ()=>{
    setNum(num+1)
}
useEffect(()=>{
    console.log('Update');  
},[num]);
    return (
    <div>
        {console.log('2. render를 대체하는 return')}
<h1>Function Counter: {num}</h1>
<button onClick={btnCk}>+1</button>

    </div>
  )
}

export default Ex14
profile
열심히 공부합시다! The best is yet to come! 💜

0개의 댓글