옝옹
냠
옝옹
전체 방문자
오늘
어제
  • 분류 전체보기 (84)
    • [LG유플러스]유레카 SW (5)
    • React (20)
    • JS (17)
    • TypeScript (5)
    • CSS & HTML (1)
    • 알고리즘 (11)
    • JAVA (20)
    • GIT (1)
    • 자격증 (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 타입변환
  • reverse() 메서드
  • 코드스플리팅
  • switch문
  • 혼자 공부하는 자바
  • ==
  • useRef
  • 혼자공부하는자바
  • java
  • JavaScript
  • java.util패키지
  • java.lang패키지
  • map() 함수
  • break문
  • useState
  • useCallback
  • useMemo
  • 자바
  • 기본api클래스
  • 함수선언
  • continue문
  • 화살표함수
  • 자바스트립트
  • 자바스크립트
  • js
  • template literal
  • join()
  • While문
  • 리액트
  • toFixed
  • 인스턴스멤버
  • 백준
  • indexOf()
  • do-while문
  • reduce
  • 변수선언
  • 타입스크립트
  • join() 메서드
  • map
  • Node.js
  • 템플릿리터럴
  • 리액트를다루는기술
  • 노마드코더
  • useEffect
  • 정적멤버
  • 접근제한자
  • sort() 메서드
  • match()
  • TypeScript
  • fillter

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
옝옹

냠

[React] Hooks
React

[React] Hooks

2023. 3. 23. 05:47

useState

  • 가장 기본적인 Hook
  • 함수 컴포넌트에서 상태 관리를 할 때 사용
const [value, setValue] = useState(0);
  • 첫번째 원소 (value) : 상태 값
  • 두번째 원소 (setValue) : 상태를 설정하는 함수
    • 이 함수에 파라미터를 넣어서 호출하면 전달받은 파라미터로 값이 바뀌고 컴포넌트가 정상적으로 리렌더링됨

useEffect

  • 리액트 컴포넌트가 렌더링(나타날 때)될 때마다 특정 작업을 수행하도록 설정
  • 클래스형 컴포넌트의 componentDidMount + componentDidUpdate 
useEffect(() => {
	console.log("렌더링 완료");
    console.log({
    	name,
        nickname
    });
});
  • 컴포넌트가 화면에 맨 처음 렌더링될 때만 실행하고, 업데이트될 때는 실행하지 않는 경우
useEffect(() => {
	console.log("렌더링 될 때 O, 업데이트 될 때 X");
}, []);
  • 특정값이 업데이트될 때만 실행하는 경우
    • 두번째 파라미터로 전달되는 배열 안에 검사하고 싶은 값을 넣어줌
useEffect(() => {
	console.log(name);
}, [name]);

useReducer

  • 컴포넌트의 상태 업데이트 로직을 분리하여 컴포넌트 외부에서도 상태 관리를 할 수 있음
    • 현재 컴포넌트가 아닌 다른 곳에 state를 저장하고 싶을 때 유용하게 사용
const [state, dispatch] = useReducer(reducer, initialState);
  • state : 현재 상태
  • dispatch : action을 발생시키는 함수
  • reducer : state와 action을 받아 새로운 state를 반환하는 함수
  • initialState : 초기값

useReducer useState
컴포넌트에서 관리하는 값(state)이 여러개일 경우 컴포넌트에서 관리하는 값이 1개일 경우
현재는 단일 state 값만 관리하지만, 추후 유동적일 가능성이 있는 경우 그 값(state)이 단순한 숫자, 문자열, boolean일 경우
스케일이 큰 프로젝트의 경우  

useMemo

  • 함수 컴포넌트 내부에서 발생하는 연산을 최적화
  • 컴퓨터 프로그램이 동일한 계산을 반복해야 할 때, 이전에 계산한 값을 메모리에 저장함으로써 동일한 계산의 반복 수행을 제거하여 프로그램 실행 속도를 빠르게 하는 기술
  • 렌더링 → 함수 호출 → memorize된 함수 재사용
const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]);
  • memoizedValue라는 저장해야될 값을 선언하고 의존성 배열에 a와 b값을 넣어 a, b의 변경 여부를 확인
  • 변경 시 computeExpensiveValue를 이용해 연산된 값을 memoizedValue에 대입

useCallback

  • 렌더링 성능을 최적화해야 하는 상황에서 사용
  • useMemo는 특정 결과값을 재사용, useCallback은 특정 함수를 재사용
const memoizedCallback = useCallback(function, deps);
  • 첫번째 파라미터 : 생성하고 싶은 함수
  • 두번째 파라미터 : 배열 (어떤 값이 바뀌었을 때 함수를 새로 생성해야하는지 명시)
  • function을 deps 배열 형태의 함수 실행 조건의 값이 변경될 때까지 저장해놓고 재사용

  • smartHome 컴포넌트가 렌더링될 때 마다  toggle함수들의 참조값이 바뀌기 때문에 모든 light 컴포넌트가 리렌더링됨
  • 이를 해결하기 위해 useCallback 사용

useRef

  • 특정 DOM을 선택 가능
import React, { useState, useRef } from "react";

function UseRef() {
  const [text, setText] = useState("");

  const textInput = useRef(); // Ref 객체 생성

  const displayText = (e) => {
    setText(e.target.value);
  };

// 선택하고자 하는 DOM에 포커스 하는 focus() DOM API를 호출
  const onReset = () => {
    setText("");
    textInput.current.focus();
  };

  return (
    <div>
  <!-- 생성한 Ref 객체를 선택하고자 하는 DOM의 ref값으로 설정하면 
  	Ref 객체의 .current값은 선택하고자하는 DOM을 가리킴. -->
      <input onChange={displayText} value={text} ref={textInput} />
      <button onClick={onReset}>초기화</button>
      <div>
        <b>값 : {text}</b>
      </div>
    </div>
  );
}

export default UseRef;
저작자표시 비영리 변경금지 (새창열림)

'React' 카테고리의 다른 글

[React] immer를 사용해 불변성 유지  (1) 2023.03.29
[React] 컴포넌트 스타일링  (1) 2023.03.23
[React] 컴포넌트의 라이프사이클 메서드  (1) 2023.03.23
[React] 컴포넌트 반복  (1) 2023.03.21
[React] ref : DOM에 이름 달기  (0) 2023.03.16
    'React' 카테고리의 다른 글
    • [React] immer를 사용해 불변성 유지
    • [React] 컴포넌트 스타일링
    • [React] 컴포넌트의 라이프사이클 메서드
    • [React] 컴포넌트 반복
    옝옹
    옝옹

    티스토리툴바