React 19:useOptimistic Hook
React 19 引入了几个新功能,包括 useOptimistic 钩子。
**useOptimistic** 帮助我们在异步函数进行时更新 UI。
让我们通过一个例子来理解 useOptimistic 的用例
如果服务器速度慢,接收响应和更新 UI 可能会延迟,从而导致用户体验不佳。
提升用户体验的最佳方式
当我们的异步代码(例如本例中的 API 调用)仍在运行时,useOptimistic hook 可以帮助管理喜欢。
代码
import { HeartFilledIcon, HeartIcon } from "@radix-ui/react-icons"; import { Box, Strong, Text } from "@radix-ui/themes"; import { useOptimistic, useState, useTransition } from "react"; const UseOptimisticExample = () => { const [likes, setLikes] = useState(100); const [isPostLiked, setIsPostLiked] = useState(false); const [optimisticData, setOptimisticData] = useOptimistic( { likes, isPostLiked }, (currentState, newLikes) => { return { likes: currentState.likes + newLikes, isPostLiked: true }; } ); const [, startTransition] = useTransition(); const onLikeClick = () => { startTransition(async () => { setOptimisticData(1); // Simulating API call await new Promise((resolve, reject) => { console.log("Request sent to server"); setTimeout(() => { resolve(likes + 1); // To simulate API call success // reject("API call failed"); // To simulate API call failure }, 8000); }) .then((newLikes) => { console.log("API call success"); setLikes(newLikes); setIsPostLiked(true); }) .catch((error) => { console.error(error); }); }); }; return ({optimisticData.isPostLiked ? ( ); }; export default UseOptimisticExample;) : ( )}
{optimisticData.likes} Likes