面试题答案
一键面试createMemo 缓存机制工作原理
- 初始求值:当
createMemo
第一次被调用时,它会执行传入的函数,并缓存该函数的返回值。例如:
import { createMemo } from'solid-js';
const count = createMemo(() => {
// 假设这里有复杂计算
return someComplexCalculation();
});
此时,someComplexCalculation
函数被执行,其返回值被缓存。
- 依赖追踪:
createMemo
会自动追踪它所依赖的响应式数据。如果依赖的响应式数据没有变化,后续访问createMemo
返回的缓存值时,不会重新执行传入的函数,而是直接返回缓存的值。
缓存更新触发情况
- 依赖数据变化:当
createMemo
内部依赖的响应式数据(如createSignal
创建的信号值)发生变化时,缓存会被更新。例如:
import { createMemo, createSignal } from'solid-js';
const [name, setName] = createSignal('');
const greet = createMemo(() => `Hello, ${name()}`);
setName('John'); // 此时 name 信号值变化,greet 的缓存会更新
- 组件重新渲染(如果适用):在 Solid.js 组件中,如果组件重新渲染,并且
createMemo
依赖的组件作用域内的响应式状态发生变化,也会触发createMemo
缓存更新。不过需要注意的是,Solid.js 的细粒度更新机制使得只有真正依赖的部分才会触发更新,而非整个组件重新渲染就一定导致createMemo
缓存更新。