Localstorage.getItem () не работает в NUXT JS

Я пытаюсь разработать корзину покупок с помощью nuxt js. Я успешно сохраняю данные тележки в локальном хранилище, но не могу их получить. Localstorage.getItem () не работает в NUXT JS

Примечание: я не хочу использовать vuex-persistedstate.

В чем именно проблема? Ошибка, данные не возвращаются, ответ отличается от ожидаемого?

Jordan 07.04.2021 12:58

Взгляните на первый файл, который я проверил, доступны ли данные из локального хранилища, затем покажите эти данные. Если нет, то покажите пустой массив. Но он всегда возвращает пустой массив.

Rifat 07.04.2021 13:06

Прочтите мой ответ. Здесь много проблем. Чтобы Vuex был реактивным, вам необходимо обновить значения в коммите. Во-вторых, коммиты всегда не должны иметь побочных эффектов и обновлять только один элемент магазина. Вы можете связать коммиты или запускать другие методы из коммитов с помощью действий

Jordan 07.04.2021 13:07
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
3
40
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я вижу много мелких проблем с этим.

Во-первых, похоже, что вы поставили addToCart и saveInLocalStorage, судя по тому, что вы фиксируете saveInLocalStorage.

Мутации следует использовать только для установки состояния одной переменной Vuex.

Они должны быть чистыми, что означает, что у них не должно быть побочных эффектов.

Вам необходимо использовать действие для saveInLocalStorage и действие для commit, мутации addToCart, прежде чем использовать dispatch для запуска действия saveInLocalStorage.

Во-вторых, неясно, где вы на самом деле запускаете эту функцию получения из локального хранилища. Вы используете его на верхнем уровне магазина Vuex?

Если это так, то для решения реальной проблемы, связанной с тем, что хранилище Vuex не обновляется, вам понадобится функция, отвечающая за получение значения storedCart и использование его для установки cart в качестве мутации, чтобы гарантировать, что хранилище Vuex действительно обновляется.

Наконец, здесь нет необходимости использовать троичную систему. Просто установите объект Vuex cart как пустой массив.

Не могли бы вы дать мне какое-нибудь представление, как я могу сделать функцию, которая обновит корзину и установит ее на storeCart?

Rifat 07.04.2021 19:43

Ну вот только что с мутацией покончено. Вы имеете в виду тот, который загрузит его из локального хранилища и установит? Опять же, это тоже должна быть мутация. Все, что обновляет переменные Vuex, должно быть мутацией. Все, что имеет побочные эффекты, должно быть действием. Действия могут использовать мутации. прочтите это :) vuex.vuejs.org/guide/actions.html, чтобы узнать о действиях

Jordan 07.04.2021 19:54

Вы должны создать действие, которое сохраняет в локальное хранилище, а затем фиксирует мутацию для отправки в корзину. Затем вы должны создать мутацию, которая поступает из локального хранилища и устанавливает данные хранилища

Jordan 07.04.2021 19:55

Скажем, у меня есть мутация getCartFromLocal (), где я получаю свои данные из локального хранилища. Где я должен зафиксировать эту мутацию?

Rifat 07.04.2021 20:27

Вы можете вызвать ему откуда угодно, правда. Я бы лично назвал это в хуке жизненного цикла created() вашего компонента макета / страницы - первым, самым верхним компонентом. Если он полагается на сначала монтируемые компоненты, используйте вместо этого mounted().

Jordan 07.04.2021 21:04

Другие вопросы по теме