面试题答案
一键面试Memoization(记忆化)概念
在Solid.js中,Memoization是一种优化技术,它通过缓存函数的计算结果,当相同的输入再次出现时,直接返回缓存的结果,而无需重新计算。在组件层面,这意味着避免不必要的重新渲染,提高应用的性能。
避免组件不必要重新渲染的方法
createMemo
:用于缓存一个值或计算结果。如果依赖项没有变化,createMemo
不会重新计算。memo
:用于包装组件。只有当组件的props发生变化时,包装的组件才会重新渲染。
示例 - 简单计数器组件优化
import { createSignal, createMemo, memo } from 'solid-js';
// 创建计数器信号
const [count, setCount] = createSignal(0);
// 创建一个依赖于计数器的计算值(记忆化)
const doubleCount = createMemo(() => count() * 2);
// 使用memo包装的子组件,只有当props变化时才重新渲染
const Display = memo((props) => {
return <div>{props.value}</div>;
});
const App = () => {
return (
<div>
<p>Count: {count()}</p>
<p>Double Count: {doubleCount()}</p>
<Display value={doubleCount()} />
<button onClick={() => setCount(count() + 1)}>Increment</button>
</div>
);
};
export default App;
在上述示例中:
createMemo
创建了doubleCount
,它只会在count
变化时重新计算。memo
包装了Display
组件,只有当传递给它的props.value
变化时,Display
组件才会重新渲染。这样,在计数器增加时,避免了不必要的重新渲染,提升了性能。