본문 바로가기
프론트엔드 FrontEnd

리액트 훅(1)

by udeserveit1 2024. 7. 29.
  • 리액트 훅이란? useState,useEffect 등 'use' 라는 접두사가 이름에 들어가는 일련의 함수   
  • 도입 배경

 - 컴포넌트 사이에서 상태 로직을 재사용하기 어렵다. -> 함수로 분리

 - 복잡한 컴포넌트들은 이해하기 어렵다. -> 관련 로직을 함수로 묶음

 - 코드 작성이 다소 복잡하다 -> 클래스 문법에 비해 상대적으로 간단

 

용도 설명
상태 관리 useState 컴포넌트 상태 관리
useReducer 복잡한 상태 로직 관리
생명주기 대응 useEffect  사이드 이펙트 처리, 생명 주기 관련 작업
useLayoutEffect  DOM 업데이트 후 동기적으로 실행할 작업을 수행
성능 최적화 useMemo  값 메모이제이션을 통해 불필요한 계산을 방지
useCallback 함수 메모이제이션을 통해 불필요한 함수 재생성을 방지
DOM 접근 및 제어  useRef  DOM 요소나 컴포넌트 인스턴스 접근
useImperativeHandle  부모 컴포넌트가 자식 컴포넌트의 인스턴스 메서드에 접근할 수 있게 함
컴포넌트 간 정보 공유 useContext 컴포넌트 트리 전체에 데이터를 공유

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

화살표로 함수 표현 가능

이제 자식 쪽으로 값을 넘겨주기\

 

자식에서 만들어 놓으면 다른 컴포넌트와 공유가 안되기에 

부모에서 state관리

 

 

 

파라미터 값을 넣어주지 않으면 mount를 할 때 아무것도 실행되지 않았으면 할 때

 

궁극적으로 업데이트가 될 때마다 어떤 것을 실행하고 싶을 때 혹은 실행하고 싶지 않을 때

useEffect 훅

//useEffect 예시
//src/APP.js


import './App.css';
import Controller from './component/Controller';
import Viewer from './component/Viewer';
import { useEffect, useState} from "react";
import refHook from './component/refHook';

function App() {
  const [count,setCount] = useState(0);
  
  
  const onIncrease = () => {
    setCount(count + 1);
  };
  const onDecrease = () => {
    setCount(count - 1 );
    
  const [text,setText]= useState("");
  
  const handleChangeText = (e) => {
   setText(e.target.value);
 };

  useEffect(() => {
    console.log("업데이트:", count, text);
    }, [count, text]);

 

 

useRef 훅 

 

- DOM 요소에 직접 접근할 때 자주 사용

- 렌더링에 필요하지 않은 값을 참조할 수 있게 해주는 훅

- 사용법

const ref = useRef(initialValue)

 

- State 변수 text로 관리하는 텍스트 입력 폼과 버튼 생성

 

 

import { useState, useRef } from "react";

function RefHook() {
  const [text, setText] = useState("");
  const textRef = useRef();
  const handleOnChange = (e) => {
    setText(e.target.value);
};
const handleOnClick = () => {
 alert(text);
 textRef.current.value = "";
};

return (
   <div>
     <input ref={textRef} value={text} onChange={handleOnChange} />
     <button onClick={handleOnClick}>작성 완료</button>
   </div>
 );
}

export default RefHook;

 


 

  • 요약 

- 라이프 사이클 상에서 지점에 따라서 다르게 수행해야할 때는 useEffect

 

- 다른 외부적인 요소를 가져와서 참조 (렌더링과 상관없이) 해야 할 때에는 useRef