答案很简单。假设我们有两个文件:
bigObject.js
定义您的商店对象,
MyComponent.svelte
这是一个使用bigObject
.
然后你可以通过这种方式实现你想要的:
// bigObject.js
import { writable } from 'svelte/store'
export const bigObject = writable({
counter: 0,
todos: [],
randomFact: "Svelte can be easy",
})
<!-- MyComponent.svelte -->
<script>
import { bigObject } from './bigObject'
</script>
<p>
count is : {$bigObject.counter}
</p>
<button on:click={() => $bigObject.counter++}>
Increment
</button>
到目前为止,这再简单不过了。任何组件的更新都会在每个使用bigObject
.
当您需要定义 mutate 的存储方法时,事情变得有点复杂bigObject
。假设我们要创建一个setCounter
将计数器设置为给定值的函数:
// bigObject.js
import { writable } from 'svelte/store'
const { subscribe, set, update } = writable({
counter: 0,
todos: [],
randomFact: "Svelte can be easy",
})
export const bigObject = {
subscribe,
set,
update,
setCounter: value => update(self => {
// ... write all your function's code here
// self is a reference to your object
self.counter = value
return self //!\\ this is important! Don't forget it
})
})
<!-- MyComponent.svelte -->
<script>
import { bigObject } from './bigObject'
</script>
<p>
count is : {$bigObject.counter}
</p>
<button on:click={() => bigObject.setCounter(42)}>
Set to 42
</button>
最后一点,请记住,当您更改store 对象的任何属性时,引用该对象的所有组件都将更新,因为 Svelte 不会考虑“这个单个属性已更改”,而是“整个对象已更改” ”。