Skip to main content

store

可编辑数据​

store.js
import { writable } from "svelte/store";

export const count = writable(0);
app.svelte
<script>
import { count } from "./store.js";
import Home from "./home.svelte";
let _count;
count.subscribe((res) => {
_count = res;
});
</script>

<p>count is: {_count}</p>
<p>count is: {$count}</p>

<Home />
home.svelte
<script>
import { count } from './store.js';
</script>

<button on:click={() => count.update((n) => n + 1)}>addCount</button>
<button on:click={() => count.update((n) => n - 1)}>deleteCount</button>

只读数据​

store.js
import { readable } from "svelte/store";

export const timer = readable(new Date(), (set) => {
let interval = setInterval(() => {
set(new Date());
}, 1000);
return () => {
clearInterval(interval);
};
});
app.svelte
<script>
import { timer } from "./store.js";
</script>

<p>{$timer}</p>

自定义 store(自带的 store)​

store.js
import { writable } from "svelte/store";

function createCount() {
const { subscribe, set, update } = writable(0);

return {
subscribe,
add: () => update((n) => n + 1),
delete: () => update((n) => n - 1),
reset: () => set(0),
};
}

export const count = createCount(0);
app.svelte
<script>
import { count } from "./store.js";
import Home from "./home.svelte";
</script>

<p>{$count}</p>

<Home />
home.svelte
<script>
import { count } from './store.js';
</script>

<button on:click={() => count.add()}>addCount</button>
<button on:click={() => count.delete()}>deleteCount</button>

自定义 store(Rxjs)​

store.js
import { BehaviorSubject } from "rxjs";

let count = new BehaviorSubject(0);

export { count };
app.svelte
<script>
import { count } from "./store.js";
import Home from "./home.svelte";
</script>

<p>{$count}</p>

<Home />
home.svelte
<script>
import { count } from './store.js';
</script>

<button on:click={() => count.next($count + 1)}>addCount</button>
<button on:click={() => count.next($count - 1)}>deleteCount</button>