본문 바로가기
부트캠프교육중/react

Hook과 Component

by 뭉지야 2023. 3. 22.
728x90

# Hook은 함수 컴포넌트에서 사용하는 메소드입니다.
함수 컴포넌트 이전에는 클래스(class) 컴포넌트가 있었습니다.

 

# class component

class Counter extends Component {
    constructor(props) {
        super(props);
        this.state = {
            counter: 0
        }
        this.handleIncrease = this.handleIncrease.bind(this);
    }

    handleIncrease = () => {
        this.setState({
            counter: this.state.counter + 1
        })
    }

    render(){
       return (
            <div>
                <p>You clicked {this.state.counter} times</p>
                <button onClick={this.handleIncrease}>
                    Click me
                </button>
            </div>
       ) 
    }
}

# function component

function Counter () {
    const [counter, setCounter] = useState(0);

    const handleIncrease = () => {
        setCounter(counter + 1)
    }

    return (
        <div>
            <p>You clicked {counter} times</p>
            <button onClick={handleIncrease}>
                Click me
            </button>
        </div>
    )
}

-Counter 컴포넌트에서 useState() Hook을 호출해 함수 컴포넌트(function component) 안에 state를 추가한 형태입니다.
-함수형 컴포넌트는 클래스형 컴포넌트에 비해 훨씬 더 직관적이고, 보기 쉽다는 특징이 있습니다. 
- 이 state는 컴포넌트가 리렌더링 되어도 그대로 유지될 것입니다. 해당 컴포넌트에서 State Hook은 하나만 사용했지만 때에 따라서 여러 개 사용할 수 있습니다.

 


# hook
-Hook은 React 16.8에 새로 추가된 기능입니다. Hook은 class를 작성하지 않고도 state와 다른 React의 기능들을 사용할 수 있게 해줍니다.
-다르게 말하면 함수형 컴포넌트에서 상태 값 및 다른 여러 기능을 사용하기 편리하게 해주는 메소드를 의미합니다.
-class가 아닌 function으로만 React를 사용할 수 있게 해주는 것이기 때문에 클래스형 컴포넌트에서는 동작하지 않습니다.

 

hook 사용규칙
1. 리액트 함수의 최상위에서만 호출해야 한다.
-일반함수, 반복문, 조건문, 중첩된 함수 내에서 Hook을 실행하면 동작하지 않는다.


2.오직 리액트 함수 내에서만 사용되어야 한다.
-리액트 함수형 컴포넌트나 커스텀 Hook이 아닌 다른 일반 JavaScript 함수 안에서 호출해서는 안 된다.
-애초에 Hook은 React의 함수 컴포넌트 내에서 사용되도록 만들어진 메소드이기 때문에 근본적으로 일반 JavaScript 함수 내에서는 정상적으로 돌아가지 않습니다.


출처

코드스테이츠

 

728x90

'부트캠프교육중 > react' 카테고리의 다른 글

useCallback  (0) 2023.03.22
useMemo  (0) 2023.03.22
React Diffing Algorithm  (0) 2023.03.22
Virtual DOM  (0) 2023.03.22
웹팩 과제하다가 살짝정리한거  (0) 2023.03.21