생명주기

8.4 useMemo Hook

함수 컴포넌트 내부에서 발생하는 연산을 최적화할 수 있다.
렌더링하는 과정에서 특정 값이 바뀌었을 때만 연산을 실행하고, 원하는 값이 바뀌지 않았다면 이전에 연산했던 결과를 다시 사용하는 방식.

  • 함수 컴포넌트 외부 함수
import React, { useMemo, useState } from 'react';

const getAverage = (list) => {
  console.log('평균값 계산');
  if (list == null || list.length === 0) return 0;
  let sum = 0;
  for (let i = 0; i < list.length; i++) {
    sum += list[i];
  }
  return sum / list.length;
};
//-------------------------------------------------------------------------
  • 함수 컴포넌트 내부
const Average = () => {
  const [list, setList] = useState([10, 50, 30, 70, 100]);
  const [number, setNumber] = useState('');

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

  const onClick = (e) => {
    setList(list.concat(parseInt(number)));
    setNumber('');
  };

  const avg = useMemo(() => {
    // POINT) useMemo는 외부에 있는 함수에의해 결과 값을 전달받아서 캐싱을 한 것!
    console.log('useMemo작동');
    return getAverage(list);
  }, [list]);

  return (
    <div>
      <input value={number} onChange={onChange} />
      <button onClick={onClick}>등록</button>
      <ul>
        {list.map((value, index) => (
          <li key={index}> {value} </li>
        ))}
      </ul>
      <div>
        <b>평균값 : </b>
        {getAverage(list)}
        {/* {avg} */}
      </div>
    </div>
  );
};

export default Average;

  • 이유
    리턴에서 {getAverage(list)}을 출력할 시
    input 태그 안의 값에 onChange 함수를 걸어두어서 input 태그 안의 값이 바뀐 때마다 렌더링이 일어나고 그 때마다 getAverage 함수가 호출된다.

  • 이유
    리턴에서 {avg}를 출력할 시
    useMemo()함수에 의해서 list 배열의 변화가 있을 시에만 getAverage 함수가 호출된다.
    다른 onChange 함수의 렌더링마다 호출되던 것과 상반됨

useEffect로 구현하기

useCallback

useMemo와 useCallback 비교

  • useMemo 는 함수 컴포넌트 "외부"에 있는 함수의 값에 대해 캐싱하는 것이 목적.
  • useCallback은 렌더링 될때 "내부"에 있는 함수를 생성하는 것에 대해 캐싱하는것이 목적. 성능이 올라간당

잠깐 복습

8.6 useRef

reducer 복습

색인 배열 연관배열

색인 배열 [] : 장점이자 목적 =>속도 빠름 (단 순서가 맞아야 한다)
연관배열 {} : 장점이자 목적 =>유연성 (키명이 없어도 됨. 없으면 걍 무시 (undefined) 안쥬금
색인 배열은 인덱스 있어서 순서가 바뀌면 안되지만
연관 배열은 key값만 맞으면 되기 때문에 순서가 상관 없다.

  • 성능 vs 유연성 을 놓고 개발자가 선택해야할 문제
    => 키가 변동성이 있는가 없는가
    내부적인 함수호출 빈번한 경우에는 : 색인
    람다구문 호출되는 함수 반복적으로 많이 호출 : 색인

커스텀 훅을 만들 때
데이터 루틴 분리
커스텀 훅 함수명에는 sueㄹ는 거 쓰기 +> 그래야 훅에과낳ㅁ거 사용가능
비즈니스로직 : 외부에서 접근하 ㄹ수 이쓴 함수 별도의 리턴 타입으로 제공
연관배열의 유연성이 굉장히 좋기 때문에 매칭을 하여 사용

9장 컴포넌트 스타일링

  • 프로젝트 새로 생성

sass
css

Q

  • 로고 회전

  • 9.2.3 예제

  • 변수명, 함수로 스타일 적용했던거

이해 못하고 넘어간거

11111



22222



9.3 css Module

9.3.1 classnames

JS 기타

  • 1

  • 2

JAVA 기타

  • final

과제

1. Average를 useModel로

2. ch6/Iteration Sample 사용자 정의 훅을 이용해서 구현할 수 있도록

생성 삭제 useReduce를 사용하여 hook형태의 함수를 만들어서 UI와 dataModeling(처리)에 관한 부분을 분리해 본다.

profile
보초딩코라 틀린 내용 있을 수도 있습니다. 댓글 지적 환영

1개의 댓글

comment-user-thumbnail
2023년 7월 17일

언니 짱짱!!🥳❤️

답글 달기
Powered by GraphCDN, the GraphQL CDN