面试题答案
一键面试原理
- Solid.js的响应式原理:Solid.js 使用一种细粒度的响应式系统。
createSignal
创建的状态是响应式的,而createMemo
会创建一个依赖收集器。当createMemo
所依赖的响应式数据(如createSignal
创建的状态)发生变化时,createMemo
会重新计算。 - 依赖跟踪:Solid.js 能够精确跟踪
createMemo
的依赖关系。只有当createMemo
所依赖的特定响应式值改变时,才会触发重新计算,而不是在整个状态树有任何改变时都重新计算。
实现方式
- 在组件A中创建状态:
import { createSignal } from 'solid-js';
function ComponentA() {
const [count, setCount] = createSignal(0);
return (
<div>
<button onClick={() => setCount(count() + 1)}>Increment</button>
<ComponentB count={count} />
<ComponentC count={count} />
</div>
);
}
- 在组件B和组件C中使用
createMemo
:
import { createMemo } from 'solid-js';
function ComponentB({ count }) {
const derivedValue = createMemo(() => {
// 这里的计算仅依赖于count
return count() * 2;
});
return <div>ComponentB: {derivedValue()}</div>;
}
function ComponentC({ count }) {
const anotherDerivedValue = createMemo(() => {
// 这里的计算仅依赖于count
return count() + 10;
});
return <div>ComponentC: {anotherDerivedValue()}</div>;
}
在上述代码中,ComponentB
和 ComponentC
的 createMemo
仅依赖于 count
。当 ComponentA
中的 count
状态更新时,Solid.js 会检测到 ComponentB
和 ComponentC
的 createMemo
所依赖的 count
发生变化,从而仅重新计算这些 createMemo
,确保了只在依赖真正变化时才进行重新计算。