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

У меня вопрос:

  • должен ли я делать вызов API каждый раз, когда пользователь нажимает кнопку добавления, и обновлять корзину в базе данных? (В настоящее время обрабатывается API контекста реакции с использованием локального хранилища, базы данных как таковой пока нет. При размещении заказа я просто очищаю локальное хранилище).

  • Теперь база данных требуется для функций

    • войти/зарегистрироваться
    • Сводка заказов для каждого пользователя
    • управление сеансом
    • роли администратора и т. д.
  • Можно просто продолжать использовать локальное хранилище для обновления корзин и выполнять вызов API только тогда, когда пользователь размещает заказ. И я могу сбросить корзину из локального хранилища после размещения заказа (это я считаю более оптимальным, поскольку это будет лучше для производительности и также снизит нагрузку на сервер).

Можно ли всего этого достичь без использования редукса?

Пожалуйста, помогите, учитывая, что я хочу сделать это приложение с лучшими практиками. Также, если у вас есть хорошие ресурсы, поделитесь, пожалуйста, я здесь новичок.

Если вы можете подумать о каких-либо других функциях, пожалуйста, дайте мне знать :)

1
Ajay Kushwaha 16 Янв 2022 в 10:47

4 ответа

Я предлагаю использовать NextAuth для управления сеансом и аутентификации в сочетании с Strapi CMS будет надежным и простым для вашего проекта.

0
Paiman Rasoli 16 Янв 2022 в 11:03
  1. Вы должны обновлять базу данных каждый раз, когда пользователь нажимает кнопку добавления, и обновлять корзину в базе данных.
  2. Вы можете использовать различные методы аутентификации пользователей, например метод входа в систему Google, или создать собственную аутентификацию пользователя с помощью JWT (веб-токен JSON).
  3. Хранить информацию о корзине пользователя в локальном хранилище до тех пор, пока пользователь не разместит заказ, было бы не очень хорошей идеей, информация о корзине является важными пользовательскими данными, и вы не можете обновить корзину пользователя на всех других устройствах, на которых пользователь вошел в систему, и данные корзины также исчезнут, как только пользователь удалит данные браузера, что может быть существенной потерей для бизнеса.
  4. Вместо редукса вы можете использовать редуктор реакции с контекстом реакции.
0
anil kumar 16 Янв 2022 в 11:10

Очень интересный вопрос, отвечу только на одну его часть, а то долго читать будет :)

Нужно ли вам делать вызов API для сохранения корзины на стороне сервера или просто делать это только после того, как заказ был размещен, — это вопрос, касающийся бизнес-логики самого вашего приложения.

Задайте вопрос: «Хочу ли я, чтобы мои пользователи могли добавлять товары в корзину и просматривать/обновлять/редактировать ее содержимое, даже если они входят в систему с другого компьютера/браузера?»

Если ответ «да», то вам обязательно нужно синхронизировать свою корзину с сервером, чтобы она всегда была согласованной. Для этой цели я бы предложил иметь своего рода очередь, в которой будет последняя версия локально измененной корзины, после того как пользователь не выполнил никаких действий в течение 2000 мс с вашей корзиной, вы можете безопасно сделать вызов API и сохранить информацию о корзине. в вашей БД.

Это уменьшит нагрузку на ваш сервер, потому что люди могут увеличить количество товаров в вашей корзине, нажав 20 раз на кнопку add, в этом случае вместо отправки 20 запросов на сервер по одному за раз. время, он просто задерживает процесс сохранения корзины, пока пользователь не перестанет взаимодействовать с вашим приложением на некоторое количество X миллисекунд.

0
Eduard 16 Янв 2022 в 11:13

Для начала хочу сказать, что мне очень понравился ваш CSS :).

Вам не нужно использовать базу данных или редукс для создания системы корзин, но, как вы можете догадаться, у них есть хорошие возможности.


ПРЕИМУЩЕСТВА БАЗЫ ДАННЫХ:

  1. Вы можете показать корзину пользователя на всех его устройствах.
  2. Корзина пользователя всегда будет здесь до тех пор, пока он ее не удалит.
  3. Вы можете получить доступ к данным по всем компонентам. (жесткий)
  4. Это очень хорошая практика для обучения.

НЕДОСТАТКИ БАЗЫ ДАННЫХ:

  1. Вам нужен API, поэтому его сложно настроить.
  2. Ваш код будет сложнее, чем другие варианты.

ПРЕИМУЩЕСТВА REDUX

  1. Это довольно легко настроить. Вам не нужен новый проект.
  2. Вы можете получить доступ к данным по всем компонентам. (средний)

МИНУСЫ REDUX

  1. На самом деле я действительно не знаю никаких недостатков редукса :) (пожалуйста, скажите мне, если вы знаете)

ПРЕИМУЩЕСТВА МЕСТНОГО ХРАНИЛИЩА

  1. Очень просто
  2. Вы можете получить доступ к данным по всем компонентам. (легкий)

НЕДОСТАТКИ ЛОКАЛЬНОГО ХРАНИЛИЩА

  1. Вы не можете показать корзину пользователя на другом устройстве

Я не выделял хранилище сеансов, потому что оно совпадает с локальным хранилищем. Единственная разница заключается в том, что хранение сеансов осуществляется по вкладкам.

По моему мнению, вам следует использовать базу данных. Я знаю, что это простое приложение, но вы можете многому научиться, делая это таким образом.

А это мои рекомендации:

  1. файлы cookie, локальное и сеансовое хранилище

  2. Сайт электронной коммерции с серверной частью

0
Suleyman Celik 16 Янв 2022 в 11:30