Перейти к содержанию
  • Лента
  • Категории
  • Последние
  • Метки
  • Популярные
  • Пользователи
  • Группы
Свернуть
exlends
Категории
  1. Главная
  2. Категории
  3. Фронтенд
  4. React
  5. react localstorage

react localstorage

Запланировано Прикреплена Закрыта Перенесена React
14 Сообщения 3 Постеры 97 Просмотры
  • Сначала старые
  • Сначала новые
  • По количеству голосов
Ответить
  • Ответить, создав новую тему
Авторизуйтесь, чтобы ответить
Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
  • FARTYIYF Не в сети
    FARTYIYF Не в сети
    FARTYIY
    написал отредактировано
    #1

    Привет, у меня есть проект на react, я прям новичок и сейчас хочу немного разобраться в теме localstorage, нормального видео я не нашел на эту тему. Так вот мне нужен кто-нибудь кто в этом разбирается, чтобы на примере моего проекта мне объяснить как это сделать. Не бесплатно! (данную услугу я оплачу). *Связь через дискорд. Буду очень признателен если найдется человек который предоставит такую услугу)

    kirilljsxK 1 ответ Последний ответ
    1
    • FARTYIYF FARTYIY

      Привет, у меня есть проект на react, я прям новичок и сейчас хочу немного разобраться в теме localstorage, нормального видео я не нашел на эту тему. Так вот мне нужен кто-нибудь кто в этом разбирается, чтобы на примере моего проекта мне объяснить как это сделать. Не бесплатно! (данную услугу я оплачу). *Связь через дискорд. Буду очень признателен если найдется человек который предоставит такую услугу)

      kirilljsxK Не в сети
      kirilljsxK Не в сети
      kirilljsx
      js
      написал отредактировано
      #2

      @FARTYIY Привет!
      А что именно у тебя не получается с localstorage?

      FARTYIYF 1 ответ Последний ответ
      0
      • kirilljsxK kirilljsx

        @FARTYIY Привет!
        А что именно у тебя не получается с localstorage?

        FARTYIYF Не в сети
        FARTYIYF Не в сети
        FARTYIY
        написал отредактировано
        #3

        @kirilljsx Привет, хочу чтобы когда человек добавляет в корзину товар, он у него там же оставался даже после перезагрузки сайта, а если удалял, чтобы товар удалялся. Сама корзина готова, и удаление и добавление

        kirilljsxK AladdinA 2 ответов Последний ответ
        1
        • FARTYIYF FARTYIY

          @kirilljsx Привет, хочу чтобы когда человек добавляет в корзину товар, он у него там же оставался даже после перезагрузки сайта, а если удалял, чтобы товар удалялся. Сама корзина готова, и удаление и добавление

          kirilljsxK Не в сети
          kirilljsxK Не в сети
          kirilljsx
          js
          написал отредактировано
          #4

          @FARTYIY Ну смотри, так как ты в react пробуешь все это дело, то тебе нужно использовать хуки useEffect и useState.

          А именно, тебе сначала нужно сделать состояние, примерно так:

          const [cart, setCart] = useState(() => {
              const saveCart = localStorage.getItem('cart');
              return saveCart ? JSON.parse(saveCart):[];
          });
          

          Смотри что тут происходит через getItem('cart') ты получаешь состояние корзины для текущего пользователя, и передаешь в переменную saveCart,

          Обрати внимание на return, здесь используется ? это тернарный оператор (надеюсь ты читал про это 😁 ) тем самым ты проверяешь есть ли какие-либо данные, если да то парсишь их, если нет то возвращаешь пустой массив.

          Опять же, так как это корзина у тебя, тебе при загрузке страницу (компонента корзины) надо эти данные подтягивать, тут на помощь придет - useEffect, при мерно так:

          useEffect(() = > {
              localStorage.setItem('cart', JSON.stringify(cart))
          }, [cart]);
          

          Тут при загрузке компонента корзины мы вызываем наш стейте - const [cart, setCart] = useState(() => {...};

          Обрати также внимание на то что в конце useEffect мы передаем нашу корзина [cart] - это нужно для того что бы каждый раз менять состояние корзины (смотря что там у тебя счетчик или еще чего)

          Ну а дальше ты уже манипулируешь данными корзины через переменную cart которую мы сделал через состояние useState.


          Про добавление в localStorage, я так понимаю у тебя уже есть функции добавления и удаления товаров в корзину (предположим)

          // Функция добавления
          const addToCart = (product) => {
              setCart((prevCart) => [...prevCart, product])
          };
          // Функция удаления
          const removeFromCart = (productId) => {
              setCart((prevCart) => prevCart.filter(item => item.id !== productId)
          }
          

          Тут дело с манипуляцией localstorage мы не используем стандартные функции его самого по типу: getItam() кроме в стейте, setItam и другие. Поподробнее можешь почитатать тут если нужна нативная манипуляция - https://learn.javascript.ru/localstorage

          За нас тут в первом случае при добавлении делает синтаксис Spread, через спрайд мы создаем совершенно новый массив, берем все элементы из старой корзины (состояния) и перекладываем в новый массив [...prevCart], вторым аргументом мы передает новый товар (новый элемент массива) [...prevCart, product]

          У тебя может возникнуть вопрос откуда у нас взялся prevCart - по сути это может быть любым название, вся магия происходит в реакте под капотом так как наша функция setCart - это элемент обновления (функция обновления) которую мы написали в самом начале const [cart, setCart] = useState(() => )}

          Теперь про функцию removeFromCart, тут аналогично, мы через setCart() берем наш массив prevCart опять же мы его исходный не изменяем и далее проходимся через функцию filter() проходимся по каждому товару и возвращаем новый массив.
          А по условию следующее: в новый массив попадают только те элементы чей id не совпадает с удаляемым.
          Обрати внимание на item.id мы обращаемся через точку нашего элемента к его id. Какая у тебя там структура ты уже сам должен знать 😀

          И самое главное почему так - это безопасное обновление состояния которое заставляет реакт перерисовывать корзину без удаления товара.

          К тому же почему мы создаем каждый раз новый массив, сам localStorage не имеет понятия массив, добавить элемент и т.д. он умеет хранить лишь одну сплошную строку текста под определенным ключом.

          Для примера, у нас есть в локалстораже ключ cart, и имеет значение:

          cart: '[{"id":1,"name":"Кроссовки"},{"id":2,"name":"Футболка"}]'
          

          Если мы на прямую попробуем передавать продукт через setItem(key, value) он будет работать как топор который не вставляет в конец массива что-то, а тупо берет новое значение и вырубает строе под этим ключом ставя на его место новое.


          Надеюсь этой информации тебе будет достаточно, я старался 😁

          FARTYIYF 1 ответ Последний ответ
          0
          • kirilljsxK Не в сети
            kirilljsxK Не в сети
            kirilljsx
            js
            написал отредактировано
            #5

            А и еще, учись работать со спрайдами Spread в реакте - это будет твоим ключем к успеху для манипуляции данных 🤙

            1 ответ Последний ответ
            0
            • FARTYIYF FARTYIY

              @kirilljsx Привет, хочу чтобы когда человек добавляет в корзину товар, он у него там же оставался даже после перезагрузки сайта, а если удалял, чтобы товар удалялся. Сама корзина готова, и удаление и добавление

              AladdinA Не в сети
              AladdinA Не в сети
              Aladdin
              js
              написал отредактировано Aladdin
              #6

              @FARTYIY для начала, лучше расскажи используешь какой либо менеджер состояний
              mobx, react context, redux, zustand. Это важно потому, что обычно задача про корзину решается именно через state manager или react context.

              Фрагмент кода тоже будет не лишним

              FARTYIYF 1 ответ Последний ответ
              0
              • kirilljsxK kirilljsx

                @FARTYIY Ну смотри, так как ты в react пробуешь все это дело, то тебе нужно использовать хуки useEffect и useState.

                А именно, тебе сначала нужно сделать состояние, примерно так:

                const [cart, setCart] = useState(() => {
                    const saveCart = localStorage.getItem('cart');
                    return saveCart ? JSON.parse(saveCart):[];
                });
                

                Смотри что тут происходит через getItem('cart') ты получаешь состояние корзины для текущего пользователя, и передаешь в переменную saveCart,

                Обрати внимание на return, здесь используется ? это тернарный оператор (надеюсь ты читал про это 😁 ) тем самым ты проверяешь есть ли какие-либо данные, если да то парсишь их, если нет то возвращаешь пустой массив.

                Опять же, так как это корзина у тебя, тебе при загрузке страницу (компонента корзины) надо эти данные подтягивать, тут на помощь придет - useEffect, при мерно так:

                useEffect(() = > {
                    localStorage.setItem('cart', JSON.stringify(cart))
                }, [cart]);
                

                Тут при загрузке компонента корзины мы вызываем наш стейте - const [cart, setCart] = useState(() => {...};

                Обрати также внимание на то что в конце useEffect мы передаем нашу корзина [cart] - это нужно для того что бы каждый раз менять состояние корзины (смотря что там у тебя счетчик или еще чего)

                Ну а дальше ты уже манипулируешь данными корзины через переменную cart которую мы сделал через состояние useState.


                Про добавление в localStorage, я так понимаю у тебя уже есть функции добавления и удаления товаров в корзину (предположим)

                // Функция добавления
                const addToCart = (product) => {
                    setCart((prevCart) => [...prevCart, product])
                };
                // Функция удаления
                const removeFromCart = (productId) => {
                    setCart((prevCart) => prevCart.filter(item => item.id !== productId)
                }
                

                Тут дело с манипуляцией localstorage мы не используем стандартные функции его самого по типу: getItam() кроме в стейте, setItam и другие. Поподробнее можешь почитатать тут если нужна нативная манипуляция - https://learn.javascript.ru/localstorage

                За нас тут в первом случае при добавлении делает синтаксис Spread, через спрайд мы создаем совершенно новый массив, берем все элементы из старой корзины (состояния) и перекладываем в новый массив [...prevCart], вторым аргументом мы передает новый товар (новый элемент массива) [...prevCart, product]

                У тебя может возникнуть вопрос откуда у нас взялся prevCart - по сути это может быть любым название, вся магия происходит в реакте под капотом так как наша функция setCart - это элемент обновления (функция обновления) которую мы написали в самом начале const [cart, setCart] = useState(() => )}

                Теперь про функцию removeFromCart, тут аналогично, мы через setCart() берем наш массив prevCart опять же мы его исходный не изменяем и далее проходимся через функцию filter() проходимся по каждому товару и возвращаем новый массив.
                А по условию следующее: в новый массив попадают только те элементы чей id не совпадает с удаляемым.
                Обрати внимание на item.id мы обращаемся через точку нашего элемента к его id. Какая у тебя там структура ты уже сам должен знать 😀

                И самое главное почему так - это безопасное обновление состояния которое заставляет реакт перерисовывать корзину без удаления товара.

                К тому же почему мы создаем каждый раз новый массив, сам localStorage не имеет понятия массив, добавить элемент и т.д. он умеет хранить лишь одну сплошную строку текста под определенным ключом.

                Для примера, у нас есть в локалстораже ключ cart, и имеет значение:

                cart: '[{"id":1,"name":"Кроссовки"},{"id":2,"name":"Футболка"}]'
                

                Если мы на прямую попробуем передавать продукт через setItem(key, value) он будет работать как топор который не вставляет в конец массива что-то, а тупо берет новое значение и вырубает строе под этим ключом ставя на его место новое.


                Надеюсь этой информации тебе будет достаточно, я старался 😁

                FARTYIYF Не в сети
                FARTYIYF Не в сети
                FARTYIY
                написал отредактировано
                #7

                @kirilljsx Большое тебе спасибо, что нашел время помочь мне. Я действительно надеюсь, что смогу разобраться во всем этом в будущем. Сейчас я мало что понимаю, так как мои функции добавления и удаления отличаются от ваших, но я думаю, что смогу понять концепцию. Еще раз спасибо!

                kirilljsxK 1 ответ Последний ответ
                1
                • AladdinA Aladdin

                  @FARTYIY для начала, лучше расскажи используешь какой либо менеджер состояний
                  mobx, react context, redux, zustand. Это важно потому, что обычно задача про корзину решается именно через state manager или react context.

                  Фрагмент кода тоже будет не лишним

                  FARTYIYF Не в сети
                  FARTYIYF Не в сети
                  FARTYIY
                  написал отредактировано
                  #8

                  @Aladdin я не разбираюсь пока в этом 😢

                  1 ответ Последний ответ
                  0
                  • FARTYIYF FARTYIY

                    @kirilljsx Большое тебе спасибо, что нашел время помочь мне. Я действительно надеюсь, что смогу разобраться во всем этом в будущем. Сейчас я мало что понимаю, так как мои функции добавления и удаления отличаются от ваших, но я думаю, что смогу понять концепцию. Еще раз спасибо!

                    kirilljsxK Не в сети
                    kirilljsxK Не в сети
                    kirilljsx
                    js
                    написал отредактировано
                    #9

                    @FARTYIY Разберешься обязательно! Уж прости времени на дискорд пока нету ((

                    Ты если что пиши вопросы и создавай темы - обязательно поможем и подскажем 😊

                    FARTYIYF 1 ответ Последний ответ
                    😊
                    0
                    • kirilljsxK kirilljsx

                      @FARTYIY Разберешься обязательно! Уж прости времени на дискорд пока нету ((

                      Ты если что пиши вопросы и создавай темы - обязательно поможем и подскажем 😊

                      FARTYIYF Не в сети
                      FARTYIYF Не в сети
                      FARTYIY
                      написал отредактировано
                      #10

                      @kirilljsx Хорошо! Если вдруг появится время, было бы отлично, я готов буду за это заплатить. Большое спасибо, что отреагировал на мой пост🙏

                      1 ответ Последний ответ
                      1
                      • FARTYIYF Не в сети
                        FARTYIYF Не в сети
                        FARTYIY
                        написал отредактировано
                        #11

                        @kirilljsx Привет. Я понимаю всё что ты мне написал. Но как и куда это записывать в случае с моим кодом я не знаю 😢 . Может у тебя будет свободные пол часа на этих выходных и ты сможешь мне помочь с этим. Сроки заказа уже поджимают а я стою на одном месте… Я готов заплатить, только помоги пожалуйста🙏 Я буду очень благодарен. Может есть знакомый кто смог бы помочь

                        1 ответ Последний ответ
                        0
                        • kirilljsxK Не в сети
                          kirilljsxK Не в сети
                          kirilljsx
                          js
                          написал отредактировано
                          #12

                          @FARTYIY Ох емае, во что ты там вписался то?
                          Блин, у меня в эти выходные прям максимально забиты😞 . В чем у тебя проблема конкретно?

                          1 ответ Последний ответ
                          0
                          • FARTYIYF Не в сети
                            FARTYIYF Не в сети
                            FARTYIY
                            написал отредактировано
                            #13

                            @kirilljsx Запутался в коде и не могу понять куда писать и что именно. В общем всё, стою на месте. Я уже правда готов заплатить сколько скажешь. Любой свободный день - я подстроюсь. Только лишь бы помогли…(

                            kirilljsxK 1 ответ Последний ответ
                            0
                            • FARTYIYF FARTYIY

                              @kirilljsx Запутался в коде и не могу понять куда писать и что именно. В общем всё, стою на месте. Я уже правда готов заплатить сколько скажешь. Любой свободный день - я подстроюсь. Только лишь бы помогли…(

                              kirilljsxK Не в сети
                              kirilljsxK Не в сети
                              kirilljsx
                              js
                              написал отредактировано
                              #14

                              @FARTYIY отодвигай проект, скажи что заболел и потребуется еще несколько дней.
                              Вот мой тг, пиши, вечером смогу посмотреть код: @kdvoryaninov

                              1 ответ Последний ответ
                              0

                              Здравствуйте! Похоже, вас заинтересовала эта беседа, но у вас ещё нет аккаунта.

                              Надоело каждый раз пролистывать одни и те же посты? Зарегистрировав аккаунт, вы всегда будете возвращаться на ту же страницу, где были раньше, и сможете выбирать, получать ли уведомления о новых ответах (по электронной почте или в виде push-уведомлений). Вы также сможете сохранять закладки и ставить лайки постам, чтобы выразить свою благодарность другим участникам сообщества.

                              С вашими комментариями этот пост мог бы стать ещё лучше 💗

                              Зарегистрироваться Войти

                              Категории

                              • Главная
                              • Новости
                              • Фронтенд
                              • Бекенд
                              • Языки программирования

                              Контакты

                              • Сотрудничество
                              • info@exlends.com

                              © 2024 - 2026 ExLends, Inc. Все права защищены.

                              Политика конфиденциальности
                              • Войти

                              • Нет учётной записи? Зарегистрироваться

                              • Войдите или зарегистрируйтесь для поиска.
                              • Первое сообщение
                                Последнее сообщение
                              0
                              • Лента
                              • Категории
                              • Последние
                              • Метки
                              • Популярные
                              • Пользователи
                              • Группы