Stores are a state management solution you can use to create a centralized data “storage” for your UI.
To avoid confusion, data stored in a store is not “stored” anywhere. When you reload the page, the store is reinitialized.
But I found stores very useful for one particular thing: accessing a data variable using JavaScript in a clean way.
In my case I had to hide a modal after an htmx HTTP POST request.
Something like this:
document.addEventListener('htmx:afterRequest', (event) => {
showModal = false
})
But since showModal was defined as x-data="{ showModal: false }" I had no way to access it using JavaScript.
So instead of initializing that variable with x-data, I created a store:
document.addEventListener('alpine:init', () => {
Alpine.store('mystore', {
showModal: false,
})
})
And then I was able to access (and edit) this variable using:
document.addEventListener('htmx:afterRequest', (event) => {
Alpine.store('mystore').showModal = false
})
Lessons in this unit:
| 0: | Introduction |
| 1: | Installing Alpine |
| 2: | The basics of Alpine |
| 3: | Events |
| 4: | Defining data |
| 5: | Looping |
| 6: | Binding user input to variables |
| 7: | Watching variables change |
| 8: | ▶︎ Stores |