When creating my first app in Astro and implementing Svelte, I encountered issues with sharing states between the components of my app. Astro, being focused on speed and content-centricity by default, does not maintain state when navigating between pages.
How do we solve this problem?
Implement the store
The first step is to implement the store, and for this, Astro suggests using Nanostores in its documentation.
npm install nanostores
After installing the nanostore dependency, we will implement the store that, for this example, would serve us to manage a user when they authenticate
Creating the store
To create the store, we will create our file, in this case, we will create it in the path src/store/auth.
Maintaining state between navigation
When creating the store, we'll encounter an issue if we want to navigate between pages because Astro, by default, loads the content, which would erase our stored information. How do we solve this?
To solve this issue, Astro offers a routing component <ViewTransitions />
that we should add to the <head>
of our app. This component, <ViewTransitions />
, provides us with page transitions without reloading the entire browser's normal navigation.
For this case, we add it to the Layout component since the <head>
will be present on all pages of the app.
Use the state
Having the store and having the <ViewTransitions />
component in our <head>
, we can now use the store without any inconvenience.
Here I have an app in progress, any questions are welcome.
My page https://kevincuadros.com/
Top comments (0)