← Volver al listado de tecnologías
Capítulo 6: MobX y Zustand
MobX y Zustand
Aprenderás a integrar Reactotron con otros state managers populares.
Integración con Zustand
// ReactotronConfig.ts
import Reactotron from 'reactotron-react-native';
export default Reactotron
.configure({ name: 'Zustand App' })
.useReactNative()
.connect();
// store.ts
import { create } from 'zustand';
import Reactotron from './ReactotronConfig';
interface Store {
count: number;
increment: () => void;
}
export const useStore = create<Store>((set, get) => ({
count: 0,
increment: () => {
const newCount = get().count + 1;
Reactotron.display({
name: 'ZUSTAND',
value: { count: newCount },
preview: `count: ${newCount}`,
});
set({ count: newCount });
},
}));
Plugin Zustand Personalizado
// zustandPlugin.ts
import Reactotron from './ReactotronConfig';
export const zustandLogger = (config) => (set, get, api) =>
config(
(...args) => {
const prevState = get();
set(...args);
const nextState = get();
Reactotron.display({
name: 'ZUSTAND',
value: { prev: prevState, next: nextState },
preview: 'State updated',
});
},
get,
api
);
// Uso
const useStore = create(
zustandLogger((set) => ({
count: 0,
increment: () => set((s) => ({ count: s.count + 1 })),
}))
);
Integración con MobX
npm install reactotron-mst # Para MobX-State-Tree
import Reactotron from 'reactotron-react-native';
import { mst } from 'reactotron-mst';
Reactotron
.configure()
.use(mst())
.connect();
Logs Manuales
Para cualquier state manager:
function logStateChange(storeName, action, state) {
Reactotron.display({
name: storeName,
value: state,
preview: action,
important: true,
});
}
Ejercicio Práctico
Objetivo
Integrar Zustand con Reactotron usando middleware.
Pasos
- Crea un store de Zustand
- Implementa el middleware de logging
- Dispara acciones y observa en timeline
- Verifica que muestra estado anterior y nuevo
Ver solución
import { create } from 'zustand';
import Reactotron from './ReactotronConfig';
const logMiddleware = (config) => (set, get, api) =>
config(
(partial, replace) => {
const prevState = get();
set(partial, replace);
Reactotron.display({
name: 'ZUSTAND',
value: { prev: prevState, next: get() },
preview: 'State changed',
});
},
get,
api
);
const useCartStore = create(
logMiddleware((set) => ({
items: [],
addItem: (item) =>
set((state) => ({ items: [...state.items, item] })),
clearCart: () => set({ items: [] }),
}))
);
Criterios de Éxito
- Middleware implementado
- Cambios visibles en timeline
- Estado prev/next mostrado