Реактивные модели в расширении (defineStore)
Внутри расширения удобно выносить состояние и логику из компонентов в небольшие сторы. В @rynt/sdk для этого экспортируется defineStore из @rynt/sdk/extension (тот же импорт, что и для defineRyntExtension).
Идея
defineStore принимает фабрику () => { … refs, computeds, methods } и возвращает функцию без аргументов, которая при каждом вызове отдаёт один и тот же экземпляр (singleton по умолчанию). Паттерн похож на «комposable с общим состоянием на всё расширение».
Пример
ts
import { computed, ref } from 'vue';
import { defineStore } from '@rynt/sdk/extension';
const useHelloStore = defineStore(() => {
const clicks = ref(0);
const label = computed(() => `Нажато: ${clicks.value}`);
function increment() {
clicks.value += 1;
}
return { clicks, label, increment };
});
export { useHelloStore };В компоненте:
ts
const hello = useHelloStore();
hello.increment();Когда не singleton
Второй аргумент defineStore(fn, false) отключает singleton: функция начинает вести себя как фабрика с аргументами (редко нужно в расширениях).
Связь с useModel
useModel('…')— данные и сервисы лаунчера, которые хост уже зарегистрировал (см. модели).defineStore— ваше локальное состояние внутри пакета расширения.