React 함수식 구성 요소의 성능 최적화 사고방식 상세
사고방식을 최적화하다.
주요 최적화 방향은 다음과 같습니다.
그러면 함수식 구성 요소에서 우리는 어떻게 성능 최적화를 합니까?주로 아래의 몇 가지 방법으로 최적화하다
React.memo
예를 들어 다음과 같이 하십시오.
상위 어셈블리에 하위 제목을 수정하고 Child 하위 어셈블리를 가져오는 단추를 놓습니다.
보실 수 있습니다. 서브어셈블리가 처음으로 콘솔을 인쇄했습니다.log ("나는 서브어셈블리")
하위 제목 수정을 누르면 Child 하위 구성 요소도 인쇄되어 불필요한 반복 렌더링 횟수가 발생합니다
//
import {useState} from 'react'
import Child from "./Child";
const Index = ()=>{
const [subTitle, setSubTitle] = useState(' ')
const updateSubTitle = ()=>{
setSubTitle(' ')
}
return (
<div>
<div> </div>
<div>{subTitle}</div>
<button onClick={updateSubTitle}> </button>
<Child/>
</div>
);
}
export default Index;
// Child.js
const Child = ()=>{
console.log(' ')
return (
<div> </div>
)
}
export default Child
최적화, React를 사용합니다.memo 패키지 서브어셈블리
import React from "react";
const Child = ()=>{
console.log(' ')
return (
<div> </div>
)
}
export default React.memo(Child)
다시 살펴보니 Child 서브어셈블리가 반복 렌더링되지 않았습니다.useCallback
여기서 우리는 다시 개조하여 Child 하위 구성 요소에 onclick 이벤트를 추가한 다음에 하위 제목 수정 단추를 누르면 우리의 Child 하위 구성 요소가 다시 렌더링된 것을 발견할 수 있습니다. 여기는 주로 하위 제목을 수정할 때handlerClick 함수가 다시 렌더링되어 하위 구성 요소가 다시 렌더링되었기 때문입니다.
//
const Index = ()=>{
const [subTitle, setSubTitle] = useState(' ')
const updateSubTitle = ()=>{
setSubTitle(' ')
}
const handlerClick = ()=>{
console.log(' ')
}
return (
<div>
<div> </div>
<div>{subTitle}</div>
<button onClick={updateSubTitle}> </button>
<Child onClick={handlerClick}/>
</div>
);
}
// Child
const Child = (props)=>{
console.log(' ')
return (
<div>
<div> </div>
<button onClick={props.onClick}> </button>
</div>
)
}
export default React.memo(Child)
최적화합니다. useCallback 패키지로 하위 구성 요소를 처리하는 handlerClick 함수를 사용하고 updateSubTitle을 다시 눌러 하위 제목을 수정합니다. 어린이 하위 구성 요소가 다시 렌더링되지 않았습니다.
//
const Index = ()=>{
const [subTitle, setSubTitle] = useState(' ')
const updateSubTitle = ()=>{
setSubTitle(' ')
}
const handlerClick = useCallback(()=>{
console.log(' ')
},[])
return (
<div>
<div> </div>
<div>{subTitle}</div>
<button onClick={updateSubTitle}> </button>
<Child onClick={handlerClick}/>
</div>
);
}
export default Index;
여기 use Callback 사용법에 대해서.
const callback = () => {
doSomething(a, b);
}
const memoizedCallback = useCallback(callback, [a, b])
함수와 의존항을 매개 변수로 useCallback에 전송하면 이 리셋 함수의 memoized 버전으로 되돌아옵니다. 이 memoizedCallback은 의존항에 변화가 있을 때만 업데이트됩니다.useMemo
결과 캐시를 계산하는 데 usemo 사용
우리는 먼저 예를 들어 이전의 기초 위에calcCount 계산 함수를 추가한 다음에 updateSubTitle 업데이트 하위 제목을 클릭하면calcCount가 다시 계산된 것을 발견할 수 있다. 즉, 매번 렌더링할 때마다 중복 계산이 발생하는데 계산량이 비교적 많은 경우 성능에 큰 영향을 미칠 수 있다
//
const Index = ()=>{
const [subTitle, setSubTitle] = useState(' ')
const updateSubTitle = ()=>{
setSubTitle(' ')
}
const handlerClick = useCallback(()=>{
console.log(' ')
},[])
const calcCount = ()=>{
let totalCount = 0
for(let i=0;i<10000;i++){
totalCount+=i
}
console.log('totalCount',totalCount)
return totalCount
}
const count = calcCount()
return (
<div>
<div> </div>
<div>{subTitle}</div>
<button onClick={updateSubTitle}> </button>
<div>count:{count}</div>
<Child onClick={handlerClick}/>
</div>
);
}
최적화, usemomo 캐시 계산 결과를 사용합니다. 업데이트SubTitle 수정 하위 제목 단추를 다시 누르면 calcCount 함수가 다시 계산되지 않는 것을 발견할 수 있습니다
const calcCount = ()=>{
let totalCount = 0
for(let i=0;i<10000;i++){
totalCount+=i
}
console.log('totalCount',totalCount)
return totalCount
}
const count = useMemo(calcCount,[])
마지막으로 주의해야 할 것은 usemomo를 맹목적으로 사용해서는 안 된다는 것이다. 구체적인 장면에 따라 예를 들어 하나의 데이터에 대한 계산량이 비교적 많으면 사용은 비교적 적용되는 것이고 일반적인 계산에 대해서는 사용하지 않아도 된다. 왜냐하면 그 자체의 usemomo도 약간의 성능을 소모하기 때문에 맹목적으로 사용하면 오히려 그 반대에 적합하기 때문이다.참고 읽기
https://mp.weixin.qq.com/s/YGvmSrr-yhPUNHbwlLSFsA
http://www.ptbird.cn/react-hook-useMemo-purerender.html
이 글은 React 함수식 구성 요소의 성능 최적화에 관한 것입니다. 더 많은 React 성능 최적화 내용은 저희 이전의 글을 검색하거나 아래의 관련 글을 계속 훑어보십시오. 앞으로 많은 응원 부탁드립니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
바삭바삭하고 간단한 결제 페이지 만들기먼저 Next.js에서 프로젝트를 만듭니다. Vercel & Next.js가 매우 편하기 때문에 최근에는이 구성을 사용하고 있습니다. 그런 다음 Tailwind CSS를 넣습니다. Tailwind CSS를 사용하면 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.