Here is an example for using Mobx Tree in Svelte. It fulfills the store contract so you can use the $
prefix.
//store.js
import { types, onSnapshot } from 'mobx-state-tree';
const Count = types
.model('Count', {
value: 0
})
.actions(self => ({
set: val => self.value = val,
increment: () => self.value += 1,
decrement: () => self.value -= 1,
reset: () => self.value = 0
}));
const count = Count.create({value: 0});
count.subscribe = method =>{
method(count);
return onSnapshot(count, method);
}
export { count };
<!--StoreControls.svelte-->
<script>
import { count } from "./store.js";
</script>
<button on:click={count.increment}>➕</button>
<button on:click={count.decrement}>➖</button>
<button on:click={count.reset}>Reset 🔙</button>
<button on:click={() => count.set({ value: '‼️' })}>Wrong Type 🙈</button>
<!--StoreView.svelte-->
<script>
import { count } from "./store.js";
</script>
<h1>{$count.value}</h1>
Install the dependencies...
cd svelte-app
npm install
...then start Rollup:
npm run dev
Navigate to localhost:5000. You should see your app running. Edit a component file in src
, save it, and reload the page to see your changes.