@@ -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" ;
7070import { 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