Работает ли автоматическая подписка магазина Svelte в файлах, не являющихся компонентами?

#subscription #svelte #svelte-store

Вопрос:

Просто основной вопрос: применим ли $-синтаксис для хранилищ в некомпонентных файлах JavaScript?

Док говорит:

Каждый раз, когда у вас есть ссылка на магазин, вы можете получить доступ к его значению внутри компонента, добавив к нему префикс$.

Однако в этом официальном примере, похоже, используется синтаксис $-в производном хранилище, которое не является компонентом:

 export const elapsed = derived(
    time,
    $time => Math.round(($time - start) / 1000)
);
 

Это особый случай для пользовательских магазинов? Или это возможно, потому что он импортируется в компонент?

Комментарии:

1. $time это просто имя параметра функции, здесь не происходит никакой стройной магии.

Ответ №1:

Ответ отрицательный, потому что будут скомпилированы только стройные файлы.

И вы правы насчет производного магазина. Но это только для того, чтобы прояснить, что обратный вызов получает значение, а не подписку. Вы также можете использовать другие имена значений, и вам не нужно начинать с $.

 export const elapsed = derived(
    time,
    _time => Math.round((_time - start) / 1000)
);
 

Комментарии:

1. Импорт файла JS в компонент не означает, что он также компилируется?

2. Нет. Но, конечно, вы можете использовать store.subscribe() или использовать get(store) здесь, чтобы получить текущее значение магазина. Или передайте $store в качестве аргумента функции импортированной функции js. Импортировано из файла js.