|
|
@@ -0,0 +1,40 @@
|
|
|
+import { useState, useCallback, memo } from "react";
|
|
|
+import './test.css';
|
|
|
+/**
|
|
|
+ * memo
|
|
|
+ * memo 允许你的组件在 props 没有改变的情况下跳过重新渲染。
|
|
|
+ * const MemoizedComponent = memo(SomeComponent, arePropsEqual?)
|
|
|
+ */
|
|
|
+const Child = memo(({ btnName, aa }) => {
|
|
|
+ console.log(`子组件${btnName}渲染了`);
|
|
|
+ return <button onClick={aa}>{btnName}</button>
|
|
|
+})
|
|
|
+const Child1 = memo(({ btnName1, aa1 }) => {
|
|
|
+ console.log("执行")
|
|
|
+ // console.log(`子组件${btnName1}渲染了`);
|
|
|
+ return <button onClick={aa1}>{btnName1}</button>
|
|
|
+})
|
|
|
+
|
|
|
+function TestComponent() {
|
|
|
+ const [count, setCount] = useState(1);
|
|
|
+ const [text,sestText] = useState("测试");
|
|
|
+ // 缓存
|
|
|
+ const handleBtn1 = useCallback(() => {
|
|
|
+ console.log("哈哈")
|
|
|
+ setCount(prev => prev + 1)
|
|
|
+ }, [])
|
|
|
+ // 不缓存
|
|
|
+ function handleBtn2() {
|
|
|
+ console.log("你好")
|
|
|
+ setCount(prev => prev + 3)
|
|
|
+ }
|
|
|
+ return (
|
|
|
+ <div className="box1">
|
|
|
+ <h3>初始值:{count}</h3>
|
|
|
+ <h3>文本:{text}</h3>
|
|
|
+ {/* <Child1 aa1={handleBtn1} btnName1="点击加一(缓存函数)" /> */}
|
|
|
+ <Child aa={handleBtn2} btnName="点击加一(不缓存缓存函数)" />
|
|
|
+ </div>
|
|
|
+ )
|
|
|
+}
|
|
|
+export default TestComponent;
|