„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Übergangsanimation in der React.js-App anzeigen

Übergangsanimation in der React.js-App anzeigen

Veröffentlicht am 27.08.2024
Durchsuche:700

View Transition Animation in React.js App

Neulich möchte ich schnell eine Animation zum Entfernen von Elementen aus der Liste für die Website erstellen. Überspringen Sie dieses Mal die React Transition Group, probieren Sie den neuen View Transition aus und sparen Sie Zeit.

Warum Loscode schreiben, wenn nur wenige Codes funktionieren.

Übergangs-API nur für Chrome anzeigen, aber mir ist das egal.

Der Kernpunkt ist document.startViewTransition.

Es muss jedoch ein DOM vor dem Status und nach dem Status eingerichtet werden, aber React.js erlaubt das nicht.

React.js reaktiv. Nicht synchron. document.startViewTransition benötigt synchron.

Fragen Sie Google, lernen Sie:

import { flushSync } from "react-dom";

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

Ich schreibe Hook:

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;

Bei Verwendung von useQuery

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

const msgs = useViewTransition(newMsgs);

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

Wenn Sie jetzt die Abfrage aktualisieren, rufen Sie document.startViewTransition auf und setzen Sie dann setState.

Benötigen Sie globales CSS

Ich füge global.css hinzu:

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

Dies teilt Chrome mit: Übertragen Sie nicht die gesamte Seite, sondern nur Elemente der Liste.

Jetzt funktioniert die Animation der Nachrichtenliste. Sehr schön.

Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/ctnr/using-view-transitions-in-reactjs-1064?1 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3