반응형
useLimenscer([state,dispatch]]) 및 useContext를 사용하여 불필요한 리렌더를 피하는 방법
다중 사용사용시 상태 렌더링의 일부를 사용하여 모든 구성 요소를 축소하십시오.
import React, { useContext } from 'react'
import Store from '../store'
import { setName } from "../actions/nameActions"
const Name = () => {
const { state: { nameReducer: { name } }, dispatch } = useContext(Store)
const handleInput = ({ target: { value } }) => { dispatch(setName(value)) }
console.log('useless rerender if other part (not name) of state is changed');
return <div>
<p>{name}</p>
<input value={name} onChange={handleInput} />
</div>
}
export default Name;
어떻게 하면 이 쓸모없는 재생산을 피할 수 있을까?
만약useState
또는useReducer
상태 변경, 구성 요소 업데이트, 구성 요소 자체에서 이를 방지할 방법이 없음.
리렌더는 부분 상태에 의존하는 하위 구성 요소에서 다음과 같이 순수하게 만들어 방지해야 한다.
const NameContainer = () => {
const { state: { nameReducer: { name } }, dispatch } = useContext(Store)
return <Name name={name} dispatch={dispatch}/>;
}
const Name = React.memo(({ name, dispatch }) => {
const handleInput = ({ target: { value } }) => { dispatch(setName(value)) }
return <div>
<p>{name}</p>
<input value={name} onChange={handleInput} />
</div>
});
NameContainer
HAR에 다시 기록될 수 있으며 Redex와 동일한 목적으로 사용될 수 있음connect
스토어에서 필요한 속성을 추출하여 연결된 구성 요소 소품에 매핑하는 방법.
반응형
'IT이야기' 카테고리의 다른 글
Python 3으로 pip을 설치하는 방법? (0) | 2022.03.26 |
---|---|
Vuetify v-btn 및 Vue 라우터를 사용하여 새 창에서 링크 열기 (0) | 2022.03.26 |
store.js 디스패치 기능에서 작동하지 않는 Vue-router 리디렉션 (0) | 2022.03.26 |
Ract Native(원본 반응)에서 입력이 초점을 잃거나 흐릿함을 방지할 경우에도 키보드를 계속 열어둘 수 있는 방법이 있는가? (0) | 2022.03.26 |
vue js에서 소품으로 기능 전달 (0) | 2022.03.26 |