Skip to content
On this page

WriteStore ​

The WriteStore is the most basic of the stores. It allows you to write data to it and read it back. Let's begin by creating a WriteStore:

typescript
import { WriteStore } from '@xeito/store';

const store = new WriteStore('initial value');

Subscribing ​

Once we have the WriteStore created, we can be notified when the value changes by using the .subscribe method and passing a callback to it:

typescript
import { WriteStore } from '@xeito/store';

const store = new WriteStore('initial value');

store.subscribe((value) => {
  console.log('The value changed to', value);
});

The store will call the callback inmediately with the current value it contains.

Unsubscribing ​

The .subscribe method returns an object with the .unsubscribe method, which can be used to unsubscribe from the store:

typescript
import { WriteStore } from '@xeito/store';

const store = new WriteStore('initial value');

const subscription = store.subscribe((value) => {
  console.log('The value changed to', value);
});

subscription.unsubscribe(); // We won't be notified anymore

Reading the value without subscribing ​

We can also get the current value of the store (without subscribing to it) by reading the .value property:

typescript
import { WriteStore } from '@xeito/store';

const store = new WriteStore('initial value');

console.log(store.value); // 'initial value'

Setting a new value ​

Finally, we can write a new value to the store by using the .set method:

typescript
import { WriteStore } from '@xeito/store';

const store = new WriteStore('initial value');

store.subscribe((value) => {
  console.log(value); // Logs 'initial value'
});

store.set('new value'); // Logs 'new value' in the subscription

Store callback ​

It's also possible to pass a second argument to the WriteStore constructor, this must be a function that will be called when the number of subscribers goes from zero to one, but not afterwards. This function receives a single set function that can be used to change the value of the store and it must return a stop function that will be called when the last subscriber unsubscribes (one to zero).

typescript
import { WriteStore } from '@xeito/store';

const store = new WriteStore('initial value', (set) => {
  // Change the value every second after the first subscriber subscribes
  const interval = setInterval(() => {
    set('new value'); 
  }, 1000);

  // Stop the interval when the last subscriber unsubscribes
  return () => {
    clearInterval(interval); 
  };
});

Update method ​

Another way to change the value of the store is by using the .update method. This method receives a function that will be called with the current value of the store and must return the new value:

typescript
import { WriteStore } from '@xeito/store';

const store = new WriteStore(0);

store.subscribe((value) => {
  console.log(value); // Logs 0
});

store.update((value) => value + 1); // Logs 1 in the subscription

Released under the MIT License.