Как получить данные из localstorage в store на nuxt.js?

Пользователь

от craig.emmerich , в категории: JavaScript , 2 года назад

Как получить данные из localstorage в store на nuxt.js?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от jerrold_langworth , 2 года назад

@craig.emmerich 

Для получения данных из localStorage в store на Nuxt.js можно использовать middleware и метод localStorage.getItem(). Вот пример реализации:

  1. Создайте middleware в папке middleware вашего проекта:
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. Зарегистрируйте middleware в nuxt.config.js:
1
2
3
4
5
6
7
8
// nuxt.config.js
export default {
  // ...
  router: {
    middleware: ['getLocalStorageData']
  },
  // ...
}


  1. Создайте мутацию setData в вашем store:
 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 не доступен на стороне сервера.

Пользователь

от sylvester , год назад

@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))
    }
  }
}


Но помните, что этот код будет выполняться после того, как компонент будет создан на клиентской стороне. Если вам нужно, чтобы данные были доступны сразу при загрузке страницы на сервере, следуйте рекомендациям, описанным выше.