Эта строка внутри <script context="module">
не должна компилироваться:
$messages = await response.json();
Для меня это выдает:
Cannot reference store value inside <script context="module">
Что означает, что вы не можете использовать синтаксис $
в context="module"
, что имеет смысл, поскольку префикс $
по сути означает «автоматически подписываться при создании компонента и отписываться при его уничтожении». Но область видимости модуля не имеет экземпляра.
Как получить общую библиотеку функций, которая использует хранилище.
Принимая это за вопрос ... Как вы пытались сделать: либо внутри блока context=module
компонента, либо в необработанном файле js.
Svelte предоставляет инструмент для работы с хранилищем вне контекста компонента (экземпляра). Фактически, одна из основных задач хранилищ - связать реактивность между «сырым» js и контекстом компонентов Svelte.
Если вы хотите изменить значение доступного для записи хранилища (как в вашем примере) используйте метод set
хранилища (доступного для записи):
messages.set(await response.json())
Если вам нужно прочитать значение хранилища только один раз, используйте помощник get
:
import { get } from 'svelte/store'
const messagesValue = get(messages)
Если вам нужно отслеживать изменения в значении, либо подпишитесь на магазин:
const dispose = messages.subscribe(messagesValue => {
// do something with the value
console.log(messagesValue)
})
// don't forget to call dispose when you're not interested in the value anymore!!
... или используйте производные магазины , для преимущества чтобы Svelte автоматически управлял вашим жизненным циклом (распоряжением) для вас.
Вы должны понимать, что хранилище Svelte на самом деле является очень простой конструкцией. У него есть метод подписки, необязательный метод set и, в основном, все. Прочитайте магазинный договор в документации: там все есть. Три коротких правила. Это означает, что вы можете легко справиться с ними (и создать новые сортировки), потому что вы уже знаете все, что нужно знать!