← Volver al listado de tecnologías
Capítulo 9: Custom Commands
Custom Commands
Los comandos personalizados permiten ejecutar código en tu app desde Reactotron.
Registrar un Comando
import Reactotron from 'reactotron-react-native';
Reactotron.onCustomCommand({
command: 'resetState',
title: 'Reset App State',
description: 'Limpia todo el estado de la app',
handler: () => {
// Tu lógica aquí
store.dispatch({ type: 'RESET' });
Reactotron.log('Estado reseteado');
},
});
Comandos con Parámetros
Reactotron.onCustomCommand({
command: 'setUser',
title: 'Set Test User',
description: 'Configura un usuario de prueba',
args: [
{
name: 'email',
type: 'string',
},
{
name: 'isAdmin',
type: 'boolean',
},
],
handler: ({ email, isAdmin }) => {
store.dispatch(setUser({ email, isAdmin }));
Reactotron.log(`Usuario configurado: ${email}`);
},
});
Comandos Útiles
// Limpiar AsyncStorage
Reactotron.onCustomCommand({
command: 'clearStorage',
title: 'Clear Storage',
handler: async () => {
await AsyncStorage.clear();
Reactotron.log('Storage limpiado');
},
});
// Simular push notification
Reactotron.onCustomCommand({
command: 'mockPush',
title: 'Mock Push Notification',
args: [{ name: 'title', type: 'string' }],
handler: ({ title }) => {
notificationHandler({ title, body: 'Test notification' });
},
});
// Navegar a pantalla
Reactotron.onCustomCommand({
command: 'navigate',
title: 'Navigate to Screen',
args: [{ name: 'screen', type: 'string' }],
handler: ({ screen }) => {
navigationRef.navigate(screen);
},
});
Usar Comandos en Reactotron
- Click en “Custom Commands” en la barra lateral
- Verás la lista de comandos registrados
- Click en un comando para ejecutar
- Completa parámetros si es necesario
Ejercicio Práctico
Objetivo
Crear comandos para facilitar el testing manual.
Pasos
- Crea comando para resetear estado
- Crea comando para navegar a cualquier pantalla
- Crea comando para limpiar cache
- Ejecuta cada comando desde Reactotron
Ver solución
import Reactotron from './ReactotronConfig';
import AsyncStorage from '@react-native-async-storage/async-storage';
import { store } from './store';
import { navigationRef } from './navigation';
// Reset completo
Reactotron.onCustomCommand({
command: 'fullReset',
title: 'Full Reset',
description: 'Resetea estado y storage',
handler: async () => {
await AsyncStorage.clear();
store.dispatch({ type: 'RESET' });
Reactotron.log('Reset completo ejecutado');
},
});
// Navegación
Reactotron.onCustomCommand({
command: 'goTo',
title: 'Navigate',
args: [{ name: 'screen', type: 'string' }],
handler: ({ screen }) => {
if (navigationRef.isReady()) {
navigationRef.navigate(screen);
Reactotron.log(`Navegando a ${screen}`);
}
},
});
// Login rápido
Reactotron.onCustomCommand({
command: 'quickLogin',
title: 'Quick Login',
handler: () => {
store.dispatch(login({
email: '[email protected]',
token: 'dev-token-123',
}));
Reactotron.log('Login de prueba ejecutado');
},
});
Criterios de Éxito
- 3+ comandos creados
- Comandos ejecutables desde Reactotron
- Acciones reflejadas en la app