|
|
@@ -0,0 +1,45 @@
|
|
|
+import { useCallback, useMemo, memo, useState } from "react"
|
|
|
+
|
|
|
+function UseLearnCallBack() {
|
|
|
+ // const cachedFn = useCallback(fn, dependencies)
|
|
|
+ /**
|
|
|
+ * fn 函数
|
|
|
+ * dependencies 依赖项
|
|
|
+ */
|
|
|
+ // useCallback是useMemo 写法等价
|
|
|
+ // const aa = useCallback(() => fn1(a, b), [a, b])
|
|
|
+ // const bb = useMemo(() => fn1(a, b), [a, b])
|
|
|
+ const [num, setNum] = useState(0);
|
|
|
+ const [text, setText] = useState('');
|
|
|
+ const MemoButton = memo(function MemoButton({ children, onClick, color }) {
|
|
|
+ console.log(children, onClick, color, '子组件')
|
|
|
+ return (
|
|
|
+ <button onClick={onClick} style={{
|
|
|
+ background: color,
|
|
|
+ color: '#ff0',
|
|
|
+ border: 'none'
|
|
|
+ }}>{children}</button>
|
|
|
+ )
|
|
|
+ })
|
|
|
+
|
|
|
+ const handleClick = useCallback(() => {
|
|
|
+ console.log("num触发")
|
|
|
+ setNum(n => n + 1)
|
|
|
+ }, [])
|
|
|
+
|
|
|
+ const handleClickText = () => {
|
|
|
+ console.log("text触发")
|
|
|
+ setText(t => t + 1)
|
|
|
+ }
|
|
|
+ return (
|
|
|
+ <div>
|
|
|
+ <h1>{text}</h1>
|
|
|
+ <h1>useCallBack:缓存函数</h1>
|
|
|
+ <MemoButton children={'稳定'} onClick={handleClick} color={'red'}>稳定</MemoButton>
|
|
|
+ <MemoButton children={'不稳定'} onClick={handleClickText} color={'blue'}>不稳定</MemoButton>
|
|
|
+
|
|
|
+ </div>
|
|
|
+ )
|
|
|
+}
|
|
|
+
|
|
|
+export default UseLearnCallBack;
|