面试题答案
一键面试- 创建响应式数据:
- 在Solid.js中,使用
createSignal
函数来创建响应式数据。例如:
import { createSignal } from'solid-js'; const [count, setCount] = createSignal(0);
createSignal
返回一个数组,第一个元素是当前值的读取器函数,第二个元素是用于更新值的写入器函数。
- 在Solid.js中,使用
- 依赖收集:
- Solid.js通过跟踪在反应式函数(如
createEffect
或createMemo
创建的函数)内部对响应式数据的读取来进行依赖收集。 - 例如,使用
createEffect
:
import { createSignal, createEffect } from'solid-js'; const [count, setCount] = createSignal(0); createEffect(() => { console.log(count()); });
- 当
count()
在createEffect
回调函数中被调用时,Solid.js会记录这个createEffect
函数依赖于count
这个响应式数据。
- Solid.js通过跟踪在反应式函数(如
- 数据变化识别与更新触发:
- 当通过写入器函数(如
setCount
)更新响应式数据时,Solid.js会检测到数据变化。 - 由于之前已经收集了依赖,Solid.js知道哪些反应式函数(如上述的
createEffect
回调)依赖于这个变化的数据。 - 然后,Solid.js会自动重新运行这些依赖的反应式函数,从而触发更新。例如,当执行
setCount(1)
时,依赖count
的createEffect
回调函数会被重新执行,控制台会再次打印更新后的count
值。
- 当通过写入器函数(如
- 组件更新:
- 在Solid.js组件中,同样的机制也适用。如果组件内部读取了响应式数据,那么当该数据变化时,组件会重新渲染。
- 例如:
import { createSignal } from'solid-js'; const MyComponent = () => { const [count, setCount] = createSignal(0); return ( <div> <p>{count()}</p> <button onClick={() => setCount(count() + 1)}>Increment</button> </div> ); };
- 这里,
<p>{count()}</p>
使得组件依赖于count
。当点击按钮调用setCount
更新count
时,组件会重新渲染以显示新的值。