diff --git a/src/content/reference/react/useOptimistic.md b/src/content/reference/react/useOptimistic.md index d191bbb551c..54c3dbcd06b 100644 --- a/src/content/reference/react/useOptimistic.md +++ b/src/content/reference/react/useOptimistic.md @@ -66,39 +66,40 @@ For example, when a user types a message into the form and hits the "Send" butto ```js src/App.js -import { useOptimistic, useState, useRef } from "react"; +import { useOptimistic, useState, useRef, startTransition } from "react"; import { deliverMessage } from "./actions.js"; -function Thread({ messages, sendMessage }) { +function Thread({ messages, sendMessageAction }) { const formRef = useRef(); - async function formAction(formData) { + function formAction(formData) { addOptimisticMessage(formData.get("message")); formRef.current.reset(); - await sendMessage(formData); + sendMessageAction(formData); } const [optimisticMessages, addOptimisticMessage] = useOptimistic( messages, (state, newMessage) => [ - ...state, { text: newMessage, sending: true - } + }, + ...state, ] ); return ( <> +
+ + +
{optimisticMessages.map((message, index) => (
{message.text} {!!message.sending && (Sending...)}
))} -
- - -
+ ); } @@ -107,11 +108,15 @@ export default function App() { const [messages, setMessages] = useState([ { text: "Hello there!", sending: false, key: 1 } ]); - async function sendMessage(formData) { - const sentMessage = await deliverMessage(formData.get("message")); - setMessages((messages) => [...messages, { text: sentMessage }]); + function sendMessageAction(formData) { + startTransition(async () => { + const sentMessage = await deliverMessage(formData.get("message")); + startTransition(() => { + setMessages((messages) => [{ text: sentMessage }, ...messages]); + }) + }) } - return ; + return ; } ```