@vanillacode314/svelte-derived-mutable
TypeScript icon, indicating that this package has built-in type declarations

2.0.2 • Public • Published

svelte-derived-mutable

Helper function to create a derived rune in svelte 5 which can be mutated

Usage

<script>
	import { derivedMutable } from '@vanillacode314/svelte-derived-mutable';

	async function createTodo(title) {
		await new Promise((resolve) => setTimeout(resolve, 1000));
		// NOTE: appending on server to demonstrate the derivation behaviour
		todos.push(title + ' on server');
	}

	let todos = $state(['a', 'b', 'c']);
	// NOTE: use $state.snapshot to deepTrack the value
	const optimisticTodos = derivedMutable(() => $state.snapshot(todos));

	async function addTodo(title) {
		optimisticTodos.value.push(title);
		await createTodo(title);
	}
</script>

<ul>
	{#each optimisticTodos.value as todo}
		<li>{todo}</li>
	{/each}
</ul>
<button onclick={() => addTodo('test')}>Add Todo</button>

Behavior

  • The intial value is derived from the passed function.
  • Does not deeptrack the value by default. If you want to deepTrack the value use $state.snapshot like the usage example.
  • To access the value both when getting or setting the value needs to be done using .value property regardless of whether the value is primitive or object.
  • On setting the value, only the derived store value is updated, not the original store value.
  • Any changes made will be overwritten when the derivation function runs again.

Tips

When to and not to deeptrack

  • deepTrack if you will be mutating the parent state used in derivation function. Like the usage example.
  • do not deepTrack if you will always be replacing the parent state used in derivation function. Like setting the parent state from an api call for example.

Installation

Download the code directly in your codebase (Recommended)

Run this command where you want to download the file

curl "https://raw.githubusercontent.com/vanillacode314/svelte-derived-mutable/refs/heads/main/src/lib/index.svelte.ts" -o svelte-derived-mutable.svelte.ts

Install from npm

npm install @vanillacode314/svelte-derived-mutable
yarn add @vanillacode314/svelte-derived-mutable
pnpm add @vanillacode314/svelte-derived-mutable
bun add @vanillacode314/svelte-derived-mutable

Readme

Keywords

Package Sidebar

Install

npm i @vanillacode314/svelte-derived-mutable

Weekly Downloads

326

Version

2.0.2

License

MIT

Unpacked Size

6.29 kB

Total Files

5

Last publish

Collaborators

  • raqueebuddinaziz