새로움으로 가득한,
Home
  • 분류 전체보기
    • Blog
      • JavaScript
      • React.js
      • Vue.js
      • Git
      • 기타
    • Diary
Home
  • 분류 전체보기
    • Blog
      • JavaScript
      • React.js
      • Vue.js
      • Git
      • 기타
    • Diary
블로그 내 검색

새로움으로 가득한,

꾸준한 사람이 되자😎

  • Blog/React.js

    [일기장 만들기_13] 최적화 완성

    2022. 3. 1.

    by. 용디

    목표

    - 프로젝트 전체 최적화 작업


    나머지 최적화 하기

    1개의 게시물을 삭제 했는데 나머지 아이템까지 리렌더링 일어남 => 게시물이 많거나 이미지가 포함될 경우에는 큰 메모리가 낭비 되기 때문에 심각한 문제가 발생!

     

    1. 최적화의 시작은 React.memo로 컴포넌트를 묶어주는것!

    export default React.memo(DiaryItem);

     

    2. useEffect를 활용해서 어떤 아이템이 리렌더링 되고 있는지 확인 (리프레시 전체 렌더 확인)

    useEffect(() => {
        console.log(`${id}번째 아이템 렌더!`);
    });

    0번 부터 19번의 아이템이 찍히는걸 확인할 수 있다.

     

    3. App 컴포넌트의 onRemove 와 onEdit 최적화

      const onRemove = useCallback((targetId) => {
        setData(setData => data.filter((it) => it.id !== targetId));
      },[]);
    
      const onEdit = useCallback((targetId, newContent) => {
        setData((data) =>
          data.map((it) => it.id === targetId ? {...it, content: newContent} : it)
        );
      },[]);

    디펜던시 어레이에 빈값으로 처리해주고, 함수형 업데이트를 사용해준다.

     

    4. 삭제를 해도 콘솔에 추가적으로 안찍히고, 추가시에는 방금 추가한 아이템만 렌더링 된다!


    ​Demo : winterlood​ - codesandbox​

     

     

     

    저작자표시 (새창열림)

    'Blog > React.js' 카테고리의 다른 글

    [일기장 만들기_15] 컴포넌트 트리에 데이터 공급 (Context)  (0) 2022.03.05
    [일기장 만들기_14] 복잡한 상태 관리 로직 분리 (useReducer)  (0) 2022.03.04
    [일기장 만들기_12] 최적화 3 - useCallback 🙄  (0) 2022.02.24
    [일기장 만들기_11] 최적화 2 - React.memo (컴포넌트 재 사용)  (0) 2022.02.24
    [일기장 만들기_10] 최적화 1 - useMemo (연산 결과 재사용)  (0) 2022.02.23

    댓글

    관련글

    • [일기장 만들기_15] 컴포넌트 트리에 데이터 공급 (Context) 2022.03.05
    • [일기장 만들기_14] 복잡한 상태 관리 로직 분리 (useReducer) 2022.03.04
    • [일기장 만들기_12] 최적화 3 - useCallback 🙄 2022.02.24
    • [일기장 만들기_11] 최적화 2 - React.memo (컴포넌트 재 사용) 2022.02.24
    맨 위로
전체 글 보기
Tistory 로그인
Tistory 로그아웃
로그아웃 글쓰기 관리

Today

Total

If you want, do it.

Designed by Nana
블로그 이미지
용디

티스토리툴바