Я пытаюсь создать компонент сообщения в 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 работает нормально, но на моей машине он добавляет две записи на сообщение.
Ага, попробуй метод @Zunayed. Иногда страницу необходимо перезагрузить, чтобы зафиксировать изменения, сделанные приложением, в localStorage.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


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