react hooks 에서 useMemo 와 useCallback 의 차이 점
15931 단어 자바 script
useMemo
데 이 터 를 캐 시 하 는 데 사용 합 니 다. 구성 요소 내부 에 있 는 렌 더 링 데 이 터 는 계산 을 통 해 계산 해 야 합 니 다. 이 계산 은 특정한 state, props 데이터 에 의존 하 는 것 입 니 다. 우 리 는 useMemo 로 이 데 이 터 를 캐 시 합 니 다. 그래서 우 리 는 그들 이 의존 하지 않 는 데이터 원본 을 수정 한 상황 에서 이 계산 함 수 를 여러 번 호출 하여 계산 자원 을 낭비 합 니 다.
직접 코드
import React, {
useState, useMemo } from 'react';
function Info(props) {
let [personalInfo , setPersonalInfo] = useState({
name: 'kevin kang',
gender: 'male'
})
function formatGender(gender) {
console.log('--- ---')
return gender === 'male' ? ' ' : ' '
}
// BAD
// useMemo , , formatGender ,
// let gender = formatGender(personalInfo.gender)
// GOOD
let gender = useMemo(()=>{
return formatGender(personalInfo.gender)
},
[personalInfo.gender])
return (
<>
<div>
: {
personalInfo.name} -- : {
gender } <br/>
<button onClick={
()=> {
setPersonalInfo({
...personalInfo,
name: 'Will Kang'
})
}
}> </button>
</div>
</>
)
}
export default Info
useCallback
캐 시 함수 입 니 다. 이 함 수 는 부모 구성 요소 가 하위 구성 요소 에 전달 하거나 hooks 안의 함 수 를 사용자 정의 합 니 다. [일반적으로 hooks 안의 함 수 를 사용자 정의 합 니 다. 구성 요소 의 데 이 터 를 참조 하 는 데 의존 하지 않 습 니 다] 이 때 우 리 는 캐 시 함수 의 장점 을 고려 할 수 있 습 니 다.
1. 매번 새로운 함 수 를 다시 설명 하지 않 아 도 메모리 방출, 메모리 할당 의 계산 자원 낭비 2 를 피 할 수 있 습 니 다. 하위 구성 요 소 는 이 함수 의 변동 으로 다시 과장 되 지 않 습 니 다.[React. memo 와 함께 사용]
import React, {
Component, useState, useEffect, useCallback } from 'react';
// BAD
// function ListItem(props) {
// let addItem = props.addItem
// useEffect(()=>{
// console.log(' ListItem ')
// },[])
// useEffect(()=>{
// console.log(' render')
// })
// return (
// { props.children }
// )
// }
// GOOD shouldComponentUpdate
const ListItem = React.memo((props)=> {
let addItem = props.addItem
useEffect(()=>{
console.log(' ListItem ')
},[])
useEffect(()=>{
console.log(' render')
})
return (
<div onClick={
addItem }> {
props.children } </div>
)
})
let count = 0
function List(props) {
let [list, setList] = useState([])
let [name, setName] = useState('Kevin')
useEffect(()=>{
setList([
'6 ',
'7 ',
'8 '
])
}, [])
const addI = useCallback(()=>{
list.push(' '+ count)
setList([...list])
}, [list])
const modifyName = () => {
setName('K3VIN' + (++count))
}
return (
<>
{
list.map((item, index) => {
return <ListItem key={
index} addItem = {
addI }>
{
item}
</ListItem>
})
}
: {
name} <button onClick={
modifyName}> </button>
</>
)
}
export default List
연습 집합: 창고 주소
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Thymeleaf 의 일반 양식 제출 과 AJAX 제출텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.