From bfdf7d175613c650fb92295130e5e281f026b574 Mon Sep 17 00:00:00 2001 From: Jerry Hogan Date: Fri, 24 Oct 2025 23:43:16 +0100 Subject: [PATCH] docs(core): explain how to create dynamic store instances using defineStore --- packages/docs/core-concepts/index.md | 32 ++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/packages/docs/core-concepts/index.md b/packages/docs/core-concepts/index.md index f3cc3eee92..937b0b9f4d 100644 --- a/packages/docs/core-concepts/index.md +++ b/packages/docs/core-concepts/index.md @@ -171,3 +171,35 @@ const { name, doubleCount } = storeToRefs(store) const { increment } = store ``` + +## Dynamic Store IDs + +In some cases, you may want multiple independent instances of the same store (e.g. one per document, chat room, or session). You can do this by generating a dynamic store ID: + +```ts +export const useBroadcastStore = (id?: string) => + defineStore(`BroadcastStore-${id}`, { + state: () => ({ messages: [] }), + actions: { + addMessage(msg) { + this.messages.push(msg) + }, + }, + })() +``` + +Each call creates an independent store: + +```ts +const roomA = useBroadcastStore('a') +const roomB = useBroadcastStore('b') + +roomA.addMessage('Hello A') +roomB.addMessage('Hello B') + +console.log(roomA.messages) // ['Hello A'] +console.log(roomB.messages) // ['Hello B'] +``` + +This pattern allows for unique, isolated stores that share the same structure. +