MST
星途 面试题库

面试题:Solid.js的createEffect与响应式系统的关系

在Solid.js的状态管理体系中,createEffect起着重要作用。请详细说明createEffect是如何与Solid.js的响应式系统协同工作的,它的触发机制是什么,以及在实际应用场景中,如何利用createEffect来处理状态变化带来的副作用操作,例如数据持久化到本地存储。
22.4万 热度难度
前端开发Solid.js

知识考点

AI 面试

面试题答案

一键面试

1. createEffect 与 Solid.js 响应式系统的协同工作

  • Solid.js 使用信号(Signal)来表示状态。信号是一个可观察的值,当信号的值发生变化时,与之相关的依赖会被更新。
  • createEffect 会自动追踪其内部对信号的依赖。当这些依赖的信号值发生变化时,createEffect 所包裹的函数就会被重新执行。

2. 触发机制

  • createEffect 第一次运行时,它会记录下在其函数体中读取的所有信号。
  • 一旦这些被记录的信号中的任何一个值发生变化,createEffect 就会触发,重新执行其内部的函数。

3. 实际应用场景 - 数据持久化到本地存储

import { createSignal, createEffect } from 'solid-js';

function App() {
  const [data, setData] = createSignal([]);

  createEffect(() => {
    localStorage.setItem('myData', JSON.stringify(data()));
  });

  const addItem = () => {
    const newData = [...data(), { id: Date.now(), value: 'new item' }];
    setData(newData);
  };

  return (
    <div>
      <button onClick={addItem}>Add Item</button>
      <ul>
        {data().map(item => (
          <li key={item.id}>{item.value}</li>
        ))}
      </ul>
    </div>
  );
}

export default App;

在上述代码中:

  • createEffect 依赖 data 信号。
  • 每当 data 通过 setData 发生变化时,createEffect 会触发,将最新的 data 数据持久化到本地存储。这样,在状态发生变化时,副作用操作(数据持久化)就会自动执行。