MST

星途 面试题库

面试题:Solid.js中createEffect的基本执行机制是什么

请简要阐述Solid.js里createEffect的基本执行机制,包括其何时触发以及依赖追踪的方式。
45.2万 热度难度
前端开发Solid.js

知识考点

AI 面试

面试题答案

一键面试

createEffect基本执行机制

  1. 何时触发
    • 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值。
  2. 依赖追踪方式
    • Solid.js采用自动依赖追踪机制。在createEffect的回调函数中,Solid.js会自动追踪访问的响应式数据。例如在createEffect(() => console.log(count()))中,Solid.js能识别出count信号是该createEffect的依赖。
    • 它通过跟踪对响应式数据的读取操作来建立依赖关系。当响应式数据(如信号或存储)的值发生变化时,Solid.js会检查哪些createEffect依赖了该数据,并触发这些createEffect重新执行。这种依赖追踪是基于函数调用栈的,在createEffect回调函数执行期间访问的响应式数据都会被视为依赖。