面试题答案
一键面试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
数据持久化到本地存储。这样,在状态发生变化时,副作用操作(数据持久化)就会自动执行。