Skip to content

Commit d6c4c0f

Browse files
authored
Fix useOptimistic example (#7792)
* fix useOptimistic example * prepend messages
1 parent 4314b49 commit d6c4c0f

File tree

1 file changed

+19
-14
lines changed

1 file changed

+19
-14
lines changed

src/content/reference/react/useOptimistic.md

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -66,39 +66,40 @@ For example, when a user types a message into the form and hits the "Send" butto
6666

6767

6868
```js src/App.js
69-
import { useOptimistic, useState, useRef } from "react";
69+
import { useOptimistic, useState, useRef, startTransition } from "react";
7070
import { deliverMessage } from "./actions.js";
7171

72-
function Thread({ messages, sendMessage }) {
72+
function Thread({ messages, sendMessageAction }) {
7373
const formRef = useRef();
74-
async function formAction(formData) {
74+
function formAction(formData) {
7575
addOptimisticMessage(formData.get("message"));
7676
formRef.current.reset();
77-
await sendMessage(formData);
77+
sendMessageAction(formData);
7878
}
7979
const [optimisticMessages, addOptimisticMessage] = useOptimistic(
8080
messages,
8181
(state, newMessage) => [
82-
...state,
8382
{
8483
text: newMessage,
8584
sending: true
86-
}
85+
},
86+
...state,
8787
]
8888
);
8989

9090
return (
9191
<>
92+
<form action={formAction} ref={formRef}>
93+
<input type="text" name="message" placeholder="Hello!" />
94+
<button type="submit">Send</button>
95+
</form>
9296
{optimisticMessages.map((message, index) => (
9397
<div key={index}>
9498
{message.text}
9599
{!!message.sending && <small> (Sending...)</small>}
96100
</div>
97101
))}
98-
<form action={formAction} ref={formRef}>
99-
<input type="text" name="message" placeholder="Hello!" />
100-
<button type="submit">Send</button>
101-
</form>
102+
102103
</>
103104
);
104105
}
@@ -107,11 +108,15 @@ export default function App() {
107108
const [messages, setMessages] = useState([
108109
{ text: "Hello there!", sending: false, key: 1 }
109110
]);
110-
async function sendMessage(formData) {
111-
const sentMessage = await deliverMessage(formData.get("message"));
112-
setMessages((messages) => [...messages, { text: sentMessage }]);
111+
function sendMessageAction(formData) {
112+
startTransition(async () => {
113+
const sentMessage = await deliverMessage(formData.get("message"));
114+
startTransition(() => {
115+
setMessages((messages) => [{ text: sentMessage }, ...messages]);
116+
})
117+
})
113118
}
114-
return <Thread messages={messages} sendMessage={sendMessage} />;
119+
return <Thread messages={messages} sendMessageAction={sendMessageAction} />;
115120
}
116121
```
117122

0 commit comments

Comments
 (0)