Svelte integration
SyncedStore works seamlessly together with Svelte Stores. Create a Svelte Store from your SyncedStore using svelteSyncedStore
from the @syncedstore/svelte
package.
import { syncedStore, getYjsValue } from "@syncedstore/core";
import { svelteSyncedStore } from "@syncedstore/svelte";
// Create your SyncedStore store
const todoStore = syncedStore({ todos: [] });
// Create Svelte Store for use in your components.
// You can treat this like any other store, including `bind`.
export const store = svelteSyncedStore(todoStore);
See this example of creating a collaborative Todo application with Svelte and SyncedStore:
<script> import { svelteStore } from "./store.js"; let newTodo = ""; const addTodo = () => { const value = newTodo && newTodo.trim(); if (!value) { return; } $svelteStore.todos.push({ title: value, completed: false }); newTodo = ""; }; const removeTodo = todo => { $svelteStore.todos.splice($svelteStore.todos.indexOf(todo), 1); }; </script> <main id="app"> <h1>Todo Svelte</h1> <form on:submit|preventDefault={addTodo}> <input class="new-todo" autocomplete="off" placeholder="What needs to be done?" bind:value={newTodo} /> </form> <ul class="todo-list"> {#each $svelteStore.todos as todo} <li class="todo"> <div> <label> <input class="toggle" type="checkbox" bind:checked={todo.completed} /> { todo.title } </label> <button class="destroy" on:click={() => removeTodo(todo)}>Delete</button> </div> </li> {/each} </ul> </main>