面试题答案
一键面试-
确保正确更新及性能优化思路:
- 响应式追踪:Svelte 的响应式系统会自动追踪依赖。对于动态变化的依赖,我们需要通过合适的方式将这些变化纳入响应式追踪范围。
- 避免重复计算:可以使用
set
方法在依赖变化时,有条件地更新derived
store,而不是每次都重新计算整个值。
-
代码实现框架:
<script>
import { writable, derived } from'svelte/store';
// 定义一些基础的 writable stores
const store1 = writable(1);
const store2 = writable(2);
const dynamicStores = writable([]);
// 用于添加动态 store 的函数
function addDynamicStore(newStore) {
dynamicStores.update(stores => {
stores.push(newStore);
return stores;
});
}
// 用于移除动态 store 的函数
function removeDynamicStore(storeToRemove) {
dynamicStores.update(stores => stores.filter(store => store!== storeToRemove));
}
// 定义 derived store
const myDerivedStore = derived([store1, store2, dynamicStores], ([$store1, $store2, $dynamicStores]) => {
let result = $store1 + $store2;
$dynamicStores.forEach(store => {
result += store.get();
});
return result;
});
</script>
{#if $myDerivedStore}
<p>The value of derived store is: {$myDerivedStore}</p>
{/if}
<button on:click={() => addDynamicStore(writable(3))}>Add dynamic store</button>
<button on:click={() => {
const stores = $dynamicStores;
if (stores.length > 0) {
removeDynamicStore(stores[0]);
}
}}>Remove dynamic store</button>
在上述代码中:
- 我们使用
writable
创建了一些基础的 store,包括动态变化的dynamicStores
。 addDynamicStore
和removeDynamicStore
函数用于添加和移除动态 store。myDerivedStore
通过derived
依赖多个 store,包括动态变化的dynamicStores
。当dynamicStores
中的 store 有添加或移除时,myDerivedStore
会自动更新,并且通过合理的计算方式避免了不必要的重复计算。