"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Ver animación de transición en la aplicación React.js

Ver animación de transición en la aplicación React.js

Publicado el 2024-08-27
Navegar:446

View Transition Animation in React.js App

Otro día quiero crear una animación de eliminación rápida de elementos de la lista para el sitio. Esta vez omita el grupo de transición de React, pruebe la nueva transición de vista y ahorre tiempo.

¿Por qué escribir código de lote cuando pocos códigos funcionan?

Ver API de transición solo para Chrome, pero no me importa.

El quid es document.startViewTransition.

Pero es necesario establecer DOM antes del estado, después del estado, pero React.js no lo permite.

React.js reactivo. No sincrónico. document.startViewTransition necesita sincronización.

Pregunta a Google Learn:

import { flushSync } from "react-dom";

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

Yo escribo gancho:

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;

Si usa useQuery

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

const msgs = useViewTransition(newMsgs);

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

Ahora, cuando useQuery update, conecte la llamada a document.startViewTransition y luego setState.

Necesita CSS global

Agrego global.css:

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

Esto le dice a Chrome: no realice la transición de toda la página, solo transfiera los elementos de la lista.

Ahora la animación de la lista de mensajes funciona. Muy lindo.

Declaración de liberación Este artículo se reproduce en: https://dev.to/ctnr/using-view-transitions-in-reactjs-1064?1 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3