Skip to content

Commit 58c9af1

Browse files
committed
change the way that merge state within useOptimistic demo
1 parent 03e74dd commit 58c9af1

File tree

1 file changed

+14
-9
lines changed

1 file changed

+14
-9
lines changed

src/content/reference/react/useOptimistic.md

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -72,25 +72,30 @@ import { deliverMessage } from "./actions.js";
7272
function Thread({ messages, sendMessage }) {
7373
const formRef = useRef();
7474
async function formAction(formData) {
75-
addOptimisticMessage(formData.get("message"));
75+
const message = {
76+
key: new Date().getTime(),
77+
text: formData.get("message")
78+
};
79+
addOptimisticMessage(message);
7680
formRef.current.reset();
77-
await sendMessage(formData);
81+
await sendMessage(message);
7882
}
7983
const [optimisticMessages, addOptimisticMessage] = useOptimistic(
8084
messages,
8185
(state, newMessage) => [
82-
...state,
86+
//properly merge state by removing the duplicated message
87+
...state.filter(msg => msg.key !== newMessage.key),
8388
{
84-
text: newMessage,
89+
...newMessage,
8590
sending: true
8691
}
8792
]
8893
);
8994

9095
return (
9196
<>
92-
{optimisticMessages.map((message, index) => (
93-
<div key={index}>
97+
{optimisticMessages.map((message) => (
98+
<div key={message.key}>
9499
{message.text}
95100
{!!message.sending && <small> (Sending...)</small>}
96101
</div>
@@ -107,9 +112,9 @@ export default function App() {
107112
const [messages, setMessages] = useState([
108113
{ text: "Hello there!", sending: false, key: 1 }
109114
]);
110-
async function sendMessage(formData) {
111-
const sentMessage = await deliverMessage(formData.get("message"));
112-
setMessages((messages) => [...messages, { text: sentMessage }]);
115+
async function sendMessage(message) {
116+
const sentMessage = await deliverMessage(message);
117+
setMessages((messages) => [...messages, sentMessage]);
113118
}
114119
return <Thread messages={messages} sendMessage={sendMessage} />;
115120
}

0 commit comments

Comments
 (0)