# Stores

La comunicación entre componentes puede salirse de nuestras manos, por ende Svelte al igual que Vue y React cuenta con un sistema integrado.

Una tienda es simplemente un objeto con un método subscribe que permite notificar a las partes interesadas cuando cambia el valor de la tienda.

# store.js

import { writable } from 'svelte/store'

export const count = writable(0)

# App.svelte

<script>
	import { onDestroy } from 'svelte';
	import {count} from './stores'

	import Contador from './components/Contador.svelte'
	import Incrementar from './components/Incrementar.svelte'
	import Reset from './components/Reset.svelte'

	let count_value;

	const unsubscribe = count.subscribe(value => {
		count_value = value
	})

	onDestroy(unsubscribe);
</script>

<main class="container">
	<h1>Contador App: {count_value}</h1>
	<Contador />
	<Incrementar />
	<Reset />
</main>

# Contador.svelte

<script>
    import {count} from '../stores'

</script>

<h2>Contador Components: {$count}</h2>

# Incrementar.svelte

<script>
    import {count} from '../stores'

    const aumentar = () => {
        count.update(n => n + 1)
    }

</script>

<button on:click={aumentar}>Aumentar</button>

# Reset.svelte

<script>
    import {count} from '../stores'

    const resetear = () => {
        count.set(1)
    }
    
</script>

<button on:click={resetear}>Reset</button>

# Writable stores

import { writable } from 'svelte/store'

const createCount = () => {
    const { subscribe, set, update } = writable(0)
    
    return {
        subscribe,
        sumar: () => {
            update(n => n + 1)
        },
        restar: () => {
            update(n => n - 1)
        },
        reiniciar: () => {
            set(0)
        }
    }
    
}

export const count = createCount()

App.svelte

<script>
	import { count } from './stores'	
</script>

<main class="container">
	<h1>Contador App: {$count}</h1>
	<button on:click={count.sumar}>sumar</button>
	<button on:click={count.restar}>restar</button>
	<button on:click={count.reiniciar}>reiniciar</button>
</main>

# Derived stores

import { derived } from 'svelte/store'

export const maximo = derived(
    count,
    $count => {
        if ($count === 5) {
            return 'Llegaste al máximo'
        } else if ($count > 5) {
            count.reiniciar()
        } else {
            return 'Aun falta...'
        }
    }
)

App.svelte

<script>
	import { count, maximo } from './stores'	
</script>

<main class="container">
	<h1>Contador App: {$count}</h1>
	<h2>{$maximo}</h2>
	<button on:click={count.sumar}>sumar</button>
	<button on:click={count.restar}>restar</button>
	<button on:click={count.reiniciar}>reiniciar</button>
</main>

# Crud Comp. y Store

# Más...

Muchas gracias por llegar hasta acá 👍

Puedes apoyar estos tutoriales y al canal de bluuweb adquiriendo algún curso premium 🙌👌❤

CURSO EN UDEMY OFERTA!

Aprende desde cero a trabajar con Bootstrap 5! aquí: Acceder al curso aquí Nos vemos en clases!

CURSO EN UDEMY OFERTA!

Aprende desde cero a trabajar con Vue.js y Firebase aquí: Acceder al curso aquí Nos vemos en clases!

CURSO EN UDEMY OFERTA!

Aprende desde cero a trabajar con React.js y Firebase aquí: Acceder al curso aquí Nos vemos en clases!