반응형

react-hooks란?

  • 기존에는 클래스 방식으로 컴포넌트 코드를 작성
  • hooks는 함수 방식으로 컴포넌트 코드를 작성
  • state 관리를 위한 코드가 간결해짐
  • 값 변경시 클래스 방식은 render() 함수만 호출되지만 함수 방식은 작성한 코드를 모두 실행하기 때문에 hooks가 비교적 느릴 수 있음

useState

import React, {useState} from 'react';

const App = () => {
    const [count, setCount] = useState(0);

    return (
        <div>
            <h1>Basic</h1>
            <button onClick={() => setCount(count + 1)}>Increment</button>
            <div>{count}</div>
        </div>
    );
};

export default App;

useInput

import React, {useState} from 'react';

const useInput = (defaultValue) => {
    const [value, setValue] = useState(defaultValue);

    const onChange = (e) => {
        setValue(e.target.value);
    };

    return {value, onChange};
};

const App = () => {
    const input = useInput("empty");

    return (
        <div>
            <h1>Input</h1>
            <input placeholder="input" {...input}/>
            <div>{input.value}</div>
        </div>
    );
};

export default App;

useRef

import React, {useRef} from 'react';

const App = () => {
    const ref = useRef(null);

    return (
        <div>
            <h1>Ref</h1>
            <input placeholder="키를 누르면 커서 이동" onKeyDown={() => ref.current.focus()}/>
            <input ref={ref}/>
        </div>
    );
};

export default App;

useEffect

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

const useInput = (defaultValue) => {
    const [value, setValue] = useState(defaultValue);

    const onChange = (e) => {
        setValue(e.target.value);
    };

    return {value, onChange};
};

const App = () => {
    const useEffectInput = useInput("");

    useEffect(() => {
        console.log("componentDidMount, componentDidUpdate");

        return () => {
            // 값이 변경되기 직전 or unmount 시점에 호출
            console.log("componentWillUnmount");
        }
    }, [useEffectInput]);

    return (
        <div>
            <h1>useEffect</h1>
            <input {...useEffectInput}/>
        </div>
    );
};

export default App;

useImperativeHandle

  • 부모 컴포넌트에게 자식 컴포넌트의 정보를 제공하는 방법
  • 자식 컴포넌트에 ref를 걸어 함수를 호출할 수 있음
  • ref를 걸 수 있도록 자식 컴포넌트는 forwardRef로 한 번 감싸주어야함
  • forwardRef로 감싸진 자식 컴포넌트는 props, ref 두 개의 파라미터만 받을 수 있음
import React, {forwardRef, useImperativeHandle, useRef} from 'react';

const Child = forwardRef((props, ref) => {
    const alertHelloWorld = () => {
        alert("Hello World!");
    };

    useImperativeHandle(ref, () => ({
        alertHelloWorld
    }));

    return (
        <div>Hello World!</div>
    );
});

const App = () => {
    const ref = useRef();

    const onClick = () => {
        ref.current.alertHelloWorld();
    };

    return (
        <div>
            <Child ref={ref}/>
            <button onClick={onClick}>Alert</button>
        </div>
    );
};

export default App;

참고

반응형

'Development > React' 카테고리의 다른 글

[React] Router  (0) 2019.05.17
[React] CSS Module  (0) 2019.05.16
[React] MobX  (0) 2019.05.14
[React] Redux  (0) 2019.05.14
[React] 기본 문법  (0) 2019.05.05

+ Recent posts