」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 在 React.js 應用程式中查看過渡動畫

在 React.js 應用程式中查看過渡動畫

發佈於2024-08-27
瀏覽:546

View Transition Animation in React.js App

有一天,我想為網站創建從清單動畫中快速刪除項目的功能。這次跳過React Transition Group,試試新的View Transition,節省時間。

當很少有程式碼能做到這一點時,為什麼要寫大量程式碼。

View Transition API 僅適用於 Chrome,但我不在乎。

關鍵是 document.startViewTransition.

但需要在state之前、state之後建立DOM,但React.js不允許。

React.js 反應式。不同步。 document.startViewTransition需要同步。

詢問 Google 學習:

import { flushSync } from "react-dom";

flushSync(() => setState(...));

我寫鉤子:

import { useState } from "react";
import { flushSync } from "react-dom";

export const useViewTransition =
  typeof document !== "undefined" && "startViewTransition" in document
    ? (newValue: T) => {
        const [value, setValue] = useState(newValue);
        if (value !== newValue) {
          document.startViewTransition(() => {
            flushSync(() => {
              setValue(newValue);
            });
          });
        }
        return value;
      }
    : (value: T) => value;

如果使用useQuery

const { data: newMsgs } = useQuery({
  queryKey: ["msgs"],
  queryFn: msgs.all(25)
});

const msgs = useViewTransition(newMsgs);

return (
  
    {msgs?.map(item => (
  1. {item.title}
  2. ))}
);

現在當useQuery更新時,hook呼叫document.startViewTransition然後setState。

需要全域 CSS

我加global.css:

@supports (view-transition-name: none) {
  ::view-transition-group(root) {
    animation-duration: 0s;
  }
  ::view-transition-group(.mymsg) {
    animation-duration: 0.4s;
  }
}

這告訴 Chrome:不要轉換整個頁面,只轉換清單項目。

現在訊息清單動畫開始運作了。很不錯。

版本聲明 本文轉載於:https://dev.to/ctnr/using-view-transitions-in-reactjs-1064?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3