Svelte:如何手动停止订阅?

Hug*_*ugo 6 javascript svelte

我有一个商店,根据用户的操作偶尔获取数据 \xe2\x80\x93 。这是一个商店,因为它的数据在全球范围内使用,并且主要所有组件都需要最新的可用数据。

\n

但是,对于一个特定组件,我只需要加载第一个数据。

\n

对于此组件,没有理由subscribe()在第一次获取后保持函数运行。那么,如何停止这个订阅功能呢?

\n

Svelte 文档中的唯一示例使用了onDestroy(),但我需要手动停止它subscribe()

\n

我尝试使用简单的“计数”(如果计数> 1,则取消订阅),但它不起作用。

\n
    import user from \'./store\'\n    \n    let usersLoaded = 0\n    \n    const unsubscribe = user.subscribe(async (data) => {\n        if(data.first_name !== null) {\n            usersLoaded = usersLoaded + 1\n        }\n        \n        if(usersLoaded > 1) {\n            unsubscribe;\n        }\n    });\n
Run Code Online (Sandbox Code Playgroud)\n

这是完整的工作 REPL:

\n

\xe2\x86\x92 https://svelte.dev/repl/95277204f8714b4b8d7f72b51da45e67?version=3.35.0

\n

Con*_*Low 8

你可以试试 Svelte's get。订阅适用于您需要对更改做出反应的情况;这是一种长期的关系。如果您只需要商店的当前价值,get那就是正确的选择。

有时,您可能需要检索您未订阅的商店的值。get允许您这样做。

import { get } from 'svelte/store';

const value = get(store);
Run Code Online (Sandbox Code Playgroud)


Hug*_*ugo 6

我不得不使用unsubscribe()而不是unsubscribe


这是最终的工作 REPL,进行了一些改进: https://svelte.dev/repl/95277204f8714b4b8d7f72b51da45e67 ?version=3.35.0