面试题答案
一键面试基本步骤与关键概念
- 定义Store结构:
- 在Svelte中,一个Store是一个具有
subscribe
方法的对象,通常还会有set
和update
方法。例如,定义一个简单的计数器Store:
const myStore = { value: 0, subscribe: (run) => { run(this.value); return () => {}; }, set: (newValue) => { this.value = newValue; }, update: (fn) => { this.value = fn(this.value); } };
- 在Svelte中,一个Store是一个具有
- 实现缓存机制:
- 缓存数据结构:可以使用一个变量来存储缓存值。例如,为上面的计数器Store添加缓存:
const myStore = { value: 0, cache: null, subscribe: (run) => { run(this.value); return () => {}; }, set: (newValue) => { if (this.cache === null) { this.cache = this.value; } this.value = newValue; }, update: (fn) => { if (this.cache === null) { this.cache = this.value; } this.value = fn(this.value); } };
- 缓存更新策略:在
set
和update
方法中,根据需求更新缓存。例如,这里在首次修改值时缓存旧值。
- 在组件中使用该Store:
- 导入Store:在Svelte组件中,首先导入自定义的Store。假设Store定义在
myStore.js
文件中。
<script> import myStore from './myStore.js'; let value; const unsubscribe = myStore.subscribe((newValue) => { value = newValue; }); const updateValue = () => { myStore.update((n) => n + 1); }; const setValue = () => { myStore.set(10); }; $: console.log('Current value:', value); $: onDestroy(() => { unsubscribe(); }); </script> <button on:click={updateValue}>Increment</button> <button on:click={setValue}>Set to 10</button> <p>The value is: {value}</p>
- 订阅数据变化:使用
subscribe
方法订阅Store的变化,subscribe
方法会返回一个取消订阅的函数。在组件销毁时(通过onDestroy
)调用这个取消订阅函数以避免内存泄漏。 - 更新Store:通过调用Store的
set
或update
方法来更新Store的值,从而触发订阅者(组件中的subscribe
回调)的更新。
- 导入Store:在Svelte组件中,首先导入自定义的Store。假设Store定义在