Store
The store module is for managing data in an application. It is not intended to drive an entire single page application. Instead, it is meant to organize and improve a standard website by making common data shareable across a codebase without contaminating the global namespace. It also allows for easy integration with LocalStorage and SessionStorage.
import $store from 'wee-store';
$store.set('globalProp', true);
$store.get('globalProp'); // true
Using markup to set variables
With any website that is serving only static HTML files, it is a common need to provide data to our JavaScript directly from our markup. Wee has a specific convention for this use-case:
<html>
<head></head>
<body>
<meta data-set="prop" data-value="test">
</body>
</html>
Any element on the DOM may be given a data-set
and data-value
attribute. This will set a property in the store module called prop
with the value of test
. You could then access that property like this:
import $store from 'wee-store';
$store.setVar();
let prop = $store.get('prop');
console.log(prop); // 'test'
You'll notice how we executed setVar
in the example above. That is how our JavaScript knows to look through the DOM and find these data-set
and data-value
pairs, converting those to variables in our store
module. setVar
is executed by default in our bootstrap
module that is imported in Wee's default entry point app.js
. If you have a custom entry point for your application, make sure to import bootstrap
or call setVar
before trying to access those properties.
Store scope
The default import for the store
module is an instance of the Store
class. This means that we can create any number of new store
instances that can be used however you desire.
import $store from 'wee-store';
$store.set('globalProp', true);
$store.get('globalProp'); // true
const $local = $store.create('local'); // returns instance of Store
$local.set('localProp', true);
$local.get('localProp'); // true
$local.get('globalProp'); // undefined
It is important to note that setVar
will set properties on the main store
module by default. In order to store properties on a custom store
instance, you need to add another attribute to your markup:
<meta data-store="local" data-set="prop" data-value="test">
Adding the data-store
attribute to the example will reserve that property for when setVar
is called on the store
instance with the name of local
.
Local and Session Storage
The store module can utilize either LocalStorage or SessionStorage to persist data. When using this feature, there are a few things to keep in mind.
By default, all data added to a store
instance will be saved in JavaScript, regardless of whether local or session storage is activated on that instance. This is to keep everything functioning as fast as possible. If it is not desirable to house all data in JavaScript, setting keepInMemory
to false
will cause the store
instance to retrieve data directly from local/session storage anytime $store.get
is called which will be less performant. This may be a preferable option if there is a large-ish (local and session storage limits can be as low as 2mb on certain mobile devices) amount of data in a store
instance that will be retrieved infrequently. Otherwise, it is best to leave the default settings alone.