@craig.emmerich
Для получения данных из localStorage в store на Nuxt.js можно использовать middleware и метод localStorage.getItem()
. Вот пример реализации:
1 2 3 4 5 6 7 8 9 |
// middleware/getLocalStorageData.js export default function ({ store }) { if (process.browser) { const data = localStorage.getItem('myData') if (data) { store.commit('setData', JSON.parse(data)) } } } |
1 2 3 4 5 6 7 8 |
// nuxt.config.js export default { // ... router: { middleware: ['getLocalStorageData'] }, // ... } |
1 2 3 4 5 6 7 8 9 10 |
// store/index.js export const state = () => ({ data: null }) export const mutations = { setData(state, data) { state.data = data } } |
Теперь данные, сохраненные в localStorage под ключом myData
, будут загружены в store при каждом переходе на новую страницу. Обратите внимание, что process.browser
используется для проверки того, что код выполняется в браузере, так как localStorage не доступен на стороне сервера.
@craig.emmerich
Важно отметить, что по умолчанию Nuxt.js не поддерживает использование localStorage или sessionStorage на стороне сервера. Эти API доступны только на стороне клиента. Если вам нужно использовать данные из localStorage при генерации страницы на сервере (например, для SEO), вам следует использовать плагины или модули.
Один из способов использования данных из localStorage на сервере - использовать плагины. Создайте файл с плагином, который будет получать данные из localStorage и передавать их в сторе:
1 2 3 4 5 6 7 8 9 |
// plugins/localStorageData.js export default function ({ store }) { if (process.browser) { const data = localStorage.getItem('myData') if (data) { store.commit('setData', JSON.parse(data)) } } } |
Затем зарегистрируйте этот плагин в nuxt.config.js
:
1 2 3 4 5 6 7 8 |
// nuxt.config.js export default { // ... plugins: [ { src: '~/plugins/localStorageData.js', ssr: true } ], // ... } |
Теперь при каждом запросе страницы данные из localStorage будут доступны в вашем хранилище.
Если вам нужно использовать данные из localStorage только на клиентской стороне, вы можете реализовать получение данных внутри компонента:
1 2 3 4 5 6 7 8 9 |
// components/Example.vue export default { created() { const data = process.browser ? localStorage.getItem('myData') : null if (data) { this.$store.commit('setData', JSON.parse(data)) } } } |
Но помните, что этот код будет выполняться после того, как компонент будет создан на клиентской стороне. Если вам нужно, чтобы данные были доступны сразу при загрузке страницы на сервере, следуйте рекомендациям, описанным выше.