В localStorage добавляется дополнительный элемент?

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

сообщение comp

import React, { useState, useEffect } from "react";

interface IMessage {
  user: string;
  text: string;
}

export const Message = () => {
  const [messages, setMessages] = useState<IMessage[]>([]);
  const [message, setMessage] = useState("");
  const [user, setUser] = useState("testuser");

  useEffect(() => {
    const fetchedMessages = JSON.parse(localStorage.getItem("messages") as any);
    if (fetchedMessages) {
      console.info("fetchedMessages=>", fetchedMessages);
    }
  }, [messages]);

  const handleFormSubmit = (event: any) => {
    event.preventDefault();
    setMessages((messages) => {
      const newData = [...messages, { text: message, user: user }];
      let oldStorage =
        JSON.parse(localStorage.getItem("messages") as any) || [];
      const oldStorageN = [...oldStorage, { text: message, user: user }];
      localStorage.removeItem("messages");
      localStorage.setItem("messages", JSON.stringify(oldStorageN));
      return newData;
    });
    setMessage("");
  };

  return (
    <>
      <div className = "MessageContainer">
        {messages.map((message) => {
          return (
            <div key = {message.text + message.user}>
              <div>
                <strong>{message.user}</strong>
                <div>{message.text}</div>
              </div>
            </div>
          );
        })}
      </div>
      <div>
        <form onSubmit = {handleFormSubmit}>
          <div>
            <input
              type = "text"
              name = "message"
              onChange = {(e) => {
                setMessage(e.target.value);
              }}
              value = {message}
            />
          </div>
          <div>
            <input type = "submit" value = "send" />
          </div>
        </form>
      </div>
    </>
  );
};

Это кодовая ссылка

https://stackblitz.com/edit/react-starter-typescript-qowlvq?file=components/Message.tsx

Примечание: на StackBlitz работает нормально, но на моей машине он добавляет две записи на сообщение.

Вы пробовали Ctrl + F5?

Zunayed Shahriar 30.03.2021 21:45

Ага, попробуй метод @Zunayed. Иногда страницу необходимо перезагрузить, чтобы зафиксировать изменения, сделанные приложением, в localStorage.

Fardeen Panjwani 03.04.2021 16:17
Поведение ключевого слова "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) для оценки ваших знаний,...
0
2
32
0

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