Replies: 4 comments
-
👋 @chaishi,感谢给 TDesign 提出了 issue。 |
Beta Was this translation helpful? Give feedback.
-
非必须...部分函数强依赖多个state。如果用useCallback包裹 就必须把这些依赖加上,或者作为参数传入。再往后的迭代维护中会日益庞杂。不利于长期维护 |
Beta Was this translation helpful? Give feedback.
-
目前为止我认为三种情况需要加useCallback |
Beta Was this translation helpful? Give feedback.
-
一般 useCallback 都是和 memo 配合使用的,举个简单的例子: import React, { useCallback, memo, useEffect, useState } from 'react';
const Child = memo((props) => {
console.log('child render', props);
return <div></div>;
});
function Memo(props) {
console.log('parent render', props);
const test = () => {};
const test2 = useCallback(() => {}, []);
// 由于每次触发render都会生成新的 test ,导致了 Child 组件 props 一直变更
return <Child test={test} />;
// 由于 test2 被useCallback 缓存起来了,所以 Memo 触发render 也不会更新 test2 函数,避免了 Child 组件重渲染
// return <Child test2={test2} />
}
export default function Demo() {
const [count, setCount] = useState(0);
useEffect(() => {
setTimeout(() => {
setCount(count + 1);
}, 1000);
}, []);
return <Memo count={count} />;
} 由于 但是这上面都需要有一个前提就是子组件要去做 所以总结起来就是,当你发现性能问题时候需要做优化的时候可以利用子组件摆脱被动更新的这个机制来优化,否则的话不需要写 useCallback,因为缓存本身也有一定的性能消耗,而且如果没有配合 memo 函数的话,你写了 useCallback 也是白写。 |
Beta Was this translation helpful? Give feedback.
-
这个功能解决了什么问题
讨论
你建议的方案是什么
讨论
Beta Was this translation helpful? Give feedback.
All reactions