Zustand
Este plugin te permite capturar las mutaciones y el estado de Zustand e inspeccionarlos más adelante mientras reproduces las grabaciones de sesiones. Esto resulta muy útil para comprender y solucionar problemas.
Instalación
Section titled Instalaciónnpm i @openreplay/tracker-zustand
Inicializa el paquete @openreplay/tracker como de costumbre y carga el plugin en él. Llama al plugin para configurar el nombre del store; esto devolverá una instancia de rastreador de store con nombre que puedes invocar con tu ejemplar de store como argumento para habilitar el seguimiento de ese store.
Si tu sitio web es una aplicación de una sola página (SPA)
Section titled Si tu sitio web es una aplicación de una sola página (SPA)import Tracker from '@openreplay/tracker';
import trackerZustand from '@openreplay/tracker-zustand';
Si tu aplicación web se renderiza en el servidor (SSR)
Section titled Si tu aplicación web se renderiza en el servidor (SSR)import Tracker from '@openreplay/tracker/cjs';
import trackerZustand from '@openreplay/tracker-zustand/cjs';
Seguimiento del store de Zustand
Section titled Seguimiento del store de Zustandimport create from "zustand";
import Tracker from '@openreplay/tracker';
import trackerZustand, { StateLogger } from '@openreplay/tracker-zustand';
const tracker = new Tracker({
projectKey: YOUR_PROJECT_KEY,
});
// as per https://docs.pmnd.rs/zustand/guides/typescript#middleware-that-doesn't-change-the-store-type
// cast type to new one
// but this seems to not be required and everything is working as is
const zustandPlugin = tracker.use(trackerZustand()) as unknown as StateLogger
const useBearStore = create(
zustandPlugin((set: any) => ({
bears: 0,
increasePopulation: () => set((state: any) => ({ bears: state.bears + 1 })),
removeAllBears: () => set({ bears: 0 }),
}),
// store name is optional
// and is randomly generated if undefined
'bear_store'
)
)
Opciones
Section titled OpcionesPuedes personalizar el comportamiento del plugin con opciones para sanear tus datos. Son similares a las del plugin estándar createLogger.
trackerZustand({
filter (mutation, state) {
// returns `true` if a mutation should be logged
// `mutation` is a `{ type, payload }`
return mutation.type !== "aBlacklistedMutation";
},
transformer (state) {
// transform the state before logging it.
// for example return only a specific sub-tree
return state.subTree;
},
mutationTransformer (mutation) {
// mutations are logged in the format of `{ type, payload }`
// we can format it any way we want.
return mutation.type;
},
})
¿Tienes preguntas?
Section titled ¿Tienes preguntas?¿Tienes problemas para configurar este plugin? Conéctate a nuestro Slack o visita nuestro Foro y obtén ayuda de nuestra comunidad.