Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- javascript
- pull
- 공부
- list.map
- 리덕스
- 웹
- php문법
- equalityFn
- Kotlin
- 리액트를 다루는 기술
- 리액트
- 자동반영
- 비동기처리
- typescript
- redux
- list
- merge
- Git
- rebase
- async
- hot Reloading
- useState
- 컬러구성
- 가상회선교환
- 리사이클러뷰
- useCallback
- createPortal
- react
- await
- CSS
Archives
- Today
- Total
공부블로그
useSelector 최적화 본문
기본 사용법
useSelector는 리덕스 스토어의 상태를 조회하는 Hook이다.
import { useSelector } from 'react-redux';
//RootState 중에 내가 가져오고 싶은 todo를 가져온다.
const todoList = useSelector((state: RootState) => state.todo)
//또는 useSelector안에서 원하는 형식으로 바꿔서 리턴할 수도 있다.
const list = useSelector((state: RootState) => {
const { todo } = state
return Array.from(todo.todo.values())
})
기본적으로, useSelector를 사용해서 리덕스 스토어의 상태를 조회 할 땐 만약 상태가 바뀌지 않았으면 리렌더링하지 않는다.
( 약간 useEffect재질 )
최적화하는 경우
그런데 useSeletor를 사용해서 한번에 여러 상태를 가져오는 경우,
//RootState중에 내가 가져오고 싶은 number, diff상태를 가져온다.
const { number, diff } = useSelector((state : RootState) => ({
number: state.counter.number,
diff: state.counter.diff
}));
조회하고자 하는 상태가 두 개 이므로 둘중에 하나만 상태가 바뀌더라도 리렌더링되는 문제가 발생한다.
이를 방지하기 위해 두가지 방법을 사용할 수 있다.
1. useSelector 를 여러번 사용한다.
const number = useSelector(state => state.counter.number);
const diff = useSelector(state => state.counter.diff);
그럼 각각의 상태가 바뀔 때만 리렌더링된다.
2. react-redux의 shallowEqual 함수를 useSelector의 두번째 인자로 전달해준다.
import React from 'react';
import { useSelector, useDispatch, shallowEqual } from 'react-redux';
const { number, diff } = useSelector((state : RootState) =>
({
number: state.counter.number,
diff: state.counter.diff
}),
shallowEqual
);
useSelector의 두번째 인자는 equalityFn 으로, 이전 값과 다음 값을 비교하여 true가 나오면 리렌더링을 하지 않고 false가 나오면 리렌더링을 한다.
equalityFn?: (left: any, right: any) => boolean
shallowEqual은 react-redux에 내장되어있는 함수로서, 객체 안의 가장 겉에 있는 값들을 모두 비교해줍니다. (얕은 비교)
참고사이트 : https://react.vlpt.us/redux/08-optimize-useSelector.html
8. useSelector 최적화 · GitBook
8. useSelector 최적화 리액트 컴포넌트에서 리덕스 상태를 조회해서 사용 할 때 최적화를 하기 위해서 어떤 사항을 고려해야 하는지 알아보도록 하겠습니다. 지난 섹션에서 할 일 목록을 만들 때에
react.vlpt.us
'공부하기' 카테고리의 다른 글
Next.js 자동 반영 hot reload 안될 때 (0) | 2022.12.20 |
---|---|
list.map( ) (0) | 2022.12.20 |
axios로 받아온 값 리턴하기 (0) | 2022.12.08 |
아이콘 버튼 만들기 ( styled-component ) (0) | 2022.12.02 |
Typescript 타입, 인터페이스, 함수 (0) | 2022.11.30 |