useOptimistic shows immediate feedback while async operations complete.
Code:
1import { useOptimistic } from "react";23function TodoList({ todos, addTodo }) {4 const [optimisticTodos, addOptimistic] = useOptimistic(5 todos,6 (state, newText) => [7 ...state,8 { id: Date.now(), text: newText, done: false, pending: true },9 ]10 );1112 const handleSubmit = async (formData) => {13 const text = formData.get("text");14 addOptimistic(text);15 await addTodo(text);16 };1718 return (19 <div>20 {optimisticTodos.map(todo => (21 <div key={todo.id} className={todo.pending ? "pending" : ""}>22 {todo.text}23 </div>24 ))}25 <form action={handleSubmit}>26 <input name="text" />27 <button type="submit">Add</button>28 </form>29 </div>30 );31}
Parameters:
state — current stateupdateFn — creates optimistic stateReturns:
optimisticState — state with optimistic updatesaddOptimistic — triggers optimistic updateHow it works:
Use cases: