闽公网安备 35020302035485号
function App() {
const [count, setCount] = useState(0)
return (
<>
<div>{count}</div>
<button onClick={() => setCount(count + 1)}>add</button>
<Foo />
</>
)
}
子组件import { memo } from "react"
const Index = () => {
console.log('re-render');
return <div>子组件</div>
}
export default memo(Index)
import { useCallback, useState } from 'react'
import Foo from '@/components/foo'
import './App.css'
// 堆代码 duidaima.com
function App() {
const request = useCallback(() => {
setTimeout(() => {
console.log('请求');
}, 10)
}, [])
// const request = () => {
// setTimeout(() => {
// console.log('请求');
// }, 10)
// }
const [count, setCount] = useState(0)
return (
<>
<button onClick={()=>setCount(count + 1)}>{count}</button>
<Foo request={request} />
</>
)
}
export default App
子组件import { memo } from "react"
interface Props {
request: () => void
}
const Index = (props: Props) => {
console.log('re-render');
return (
<button onClick={props.request}>按钮</button>
)
}
export default memo(Index)
三 传递给子组件的引用数据类型需要使用 useMemo 包裹
其实和上面说的传递函数给组件,函数要用 useCallback 包裹起来是同一个道理。函数也是引用数据类型,是一个特殊的对象!
父组件import { useCallback, useMemo, useState } from 'react'
import Foo from '@/components/foo'
import './App.css'
function App() {
const obj = useMemo(() => ({
name: 'xiaowang',
age: 19
}), [])
const [count, setCount] = useState(0)
return (
<>
<button onClick={()=>setCount(count + 1)}>{count}</button>
<Foo obj={obj}/>
</>
)
}
export default App
子组件import { memo } from "react"
interface Props {
obj: {
name: string,
age: number
}
}
const Index = (props: Props) => {
console.log('re-render');
return (
<button>按钮</button>
)
}
export default memo(Index)
四. hook 使用 useMemo 包裹function App() {
const list = usePow([1,2,3,4])
console.log(list);
const list2 = usePow([1,2])
console.log(list2);
const [count, setCount] = useState(0)
return (
<>
<button onClick={()=>setCount(count + 1)}>{count}</button>
<Foo />
</>
)
}
hookimport { useMemo } from 'react';
export default (list: number[]) => {
return useMemo(() => list.map(num => {
console.log('hook 执行了');
return Math.pow(num, 2)
}), [])
}