面试题答案
一键面试createEffect基本执行机制
- 何时触发:
createEffect
会在组件首次渲染后立即执行。例如,在一个简单的Solid.js组件中:
上述代码中,import { createEffect } from "solid-js"; import { render } from "solid-js/web"; const App = () => { createEffect(() => { console.log('Effect executed on initial render'); }); return <div>App component</div>; }; render(() => <App />, document.getElementById('app'));
createEffect
的回调函数会在App
组件首次渲染完成后马上在控制台打印信息。- 当依赖的响应式数据发生变化时,
createEffect
会再次执行。例如:
这里import { createEffect, createSignal } from "solid-js"; import { render } from "solid-js/web"; const App = () => { const [count, setCount] = createSignal(0); createEffect(() => { console.log(`Count is: ${count()}`); }); return ( <div> <button onClick={() => setCount(count() + 1)}>Increment</button> </div> ); }; render(() => <App />, document.getElementById('app'));
createEffect
依赖count
信号,每次点击按钮改变count
的值时,createEffect
的回调函数就会重新执行并在控制台打印更新后的count
值。 - 依赖追踪方式:
- Solid.js采用自动依赖追踪机制。在
createEffect
的回调函数中,Solid.js会自动追踪访问的响应式数据。例如在createEffect(() => console.log(count()))
中,Solid.js能识别出count
信号是该createEffect
的依赖。 - 它通过跟踪对响应式数据的读取操作来建立依赖关系。当响应式数据(如信号或存储)的值发生变化时,Solid.js会检查哪些
createEffect
依赖了该数据,并触发这些createEffect
重新执行。这种依赖追踪是基于函数调用栈的,在createEffect
回调函数执行期间访问的响应式数据都会被视为依赖。
- Solid.js采用自动依赖追踪机制。在