面试题答案
一键面试依赖追踪机制基本原理
- 响应式数据定义:在Solid.js中,通过
createSignal
等函数创建响应式数据。这些函数返回一个包含当前值和更新函数的数组。例如const [count, setCount] = createSignal(0);
,count
为当前值,setCount
用于更新值。 - 追踪依赖:当一个函数(如组件函数或effect函数)访问响应式数据时,Solid.js会自动追踪这个函数对响应式数据的依赖。Solid.js内部维护一个依赖关系图,记录哪些函数依赖了哪些响应式数据。
- 更新触发:当响应式数据发生变化(通过更新函数,如
setCount
)时,Solid.js会遍历依赖关系图,找到所有依赖该数据的函数,并重新执行它们,从而实现细粒度的更新。
具体代码中依赖关系的建立与追踪体现
组件内依赖建立
import { createSignal } from 'solid-js';
function Counter() {
const [count, setCount] = createSignal(0);
return (
<div>
<p>Count: {count()}</p>
<button onClick={() => setCount(count() + 1)}>Increment</button>
</div>
);
}
在这个Counter
组件中,p
标签内的count()
建立了对count
信号的依赖。当count
信号通过setCount
更新时,组件会重新渲染,更新p
标签内的文本。
使用createEffect
建立依赖
import { createSignal, createEffect } from'solid-js';
function App() {
const [count, setCount] = createSignal(0);
createEffect(() => {
console.log('Count has changed:', count());
});
return (
<div>
<button onClick={() => setCount(count() + 1)}>Increment</button>
</div>
);
}
这里createEffect
中的回调函数依赖于count
信号。每当count
信号更新,createEffect
的回调函数就会被执行,在控制台打印出更新后的count
值。