23. State
Tutorial: State en React Native
📌 ¿Qué es el State (Estado)?
El State es un objeto que contiene datos dinámicos y cambiantes que controlan el comportamiento de un componente. A diferencia de las props (propiedades), el state SÍ es mutable y puede cambiar directamente desde el componente que lo posee.
🔍 Diferencia clave: Props vs State
🎯 Ejemplo Práctico: Componente con Estado
Vamos a crear un componente que cambia de color al ser presionado.
1. Functional Component con Hook useState
tsx
// mlPrimerComponente.tsx
import React, { useState } from 'react';
import { TouchableOpacity, StyleSheet } from 'react-native';
interface Props {
color: string;
colorOnSelected: string;
}
export const MlPrimerComponente = ({ color, colorOnSelected }: Props) => {
// 1. Definimos el state con useState
const [selected, setSelected] = useState<boolean>(false);
// 2. Función que cambia el estado
const onSelection = () => {
setSelected(currentValue => !currentValue);
};
return (
<TouchableOpacity
onPress={onSelection}
style={[
style.mainComponent,
{ backgroundColor: selected ? colorOnSelected : color }
]}
/>
);
};
const style = StyleSheet.create({
mainComponent: {
width: 56,
height: 56,
borderRadius: 8,
},
});
Explicación paso a paso:
useState(false): Inicializa la variable selected con valor false
selected: Variable que contiene el valor actual del estado
setSelected: Función para actualizar el estado
onSelection: Invierte el valor booleano (true ↔ false)
Render condicional: Cambia el color según el estado
2. Class Component con State
tsx
// mlPrimerComponenteClass.tsx
import React, { Component } from 'react';
import { TouchableOpacity, StyleSheet } from 'react-native';
interface Props {
color: string;
colorOnSelected: string;
}
interface State {
selected: boolean;
}
export class MlPrimerComponenteClass extends Component<Props, State> {
// 1. Definimos la estructura del state en la interfaz
// 2. Inicializamos el state en el constructor
constructor(props: Props) {
super(props);
this.state = {
selected: false,
};
}
// 3. Método para cambiar el estado
onSelection = () => {
this.setState(prevState => ({
selected: !prevState.selected,
}));
};
render() {
const { color, colorOnSelected } = this.props;
const { selected } = this.state;
return (
<TouchableOpacity
onPress={this.onSelection}
style={[
style.mainComponent,
{ backgroundColor: selected ? colorOnSelected : color }
]}
/>
);
}
}
const style = StyleSheet.create({
mainComponent: {
width: 56,
height: 56,
borderRadius: 8,
},
});
Explicación paso a paso (Class Component):
Interfaz State: Define la estructura del estado
Genérico Component<Props, State>: Especifica tipos para props y state
Constructor: Inicializa el estado con this.state = { selected: false }
setState(): Método especial para actualizar el estado
Desestructuración: Extraemos selected del state para usarlo en el render
🚀 Uso de los Componentes
tsx
// App.tsx
import React from 'react';
import { MlPrimerComponente } from './mlPrimerComponente';
import { MlPrimerComponenteClass } from './mlPrimerComponenteClass';
const App = () => {
return (
<>
{/* Functional Component */}
<MlPrimerComponente
color="blue"
colorOnSelected="green"
/>
{/* Class Component */}
<MlPrimerComponenteClass
color="blue"
colorOnSelected="green"
/>
</>
);
};
⚡ ¿Qué Sucede al Cambiar el Estado?
Trigger: El usuario presiona el componente → ejecuta onSelection
Actualización: setSelected o setState cambia el valor del estado
Re-render: React detecta el cambio y vuelve a renderizar el componente
Actualización visual: El componente muestra el nuevo color
🆚 Comparación: Functional vs Class Components
Functional Component con Hooks
✅ Más simple y conciso (menos código)
✅ useState en una línea
✅ Más fácil de leer y mantener
✅ Recomendado para componentes nuevos
Class Component
✅ Más control sobre el ciclo de vida
✅ Métodos como componentDidMount, componentDidUpdate
✅ Manejo de errores con componentDidCatch
✅ Útil para componentes complejos con múltiples estados
📝 Resumen
El State almacena datos que pueden cambiar durante la vida del componente
Las Props son datos inmutables que se pasan entre componentes
useState es el hook para manejar estado en functional components
this.setState es el método para manejar estado en class components
Cada cambio de estado provoca un re-render del componente
💡 Consejo Práctico
Usa Functional Components con Hooks para la mayoría de tus componentes. Son más modernos, fáciles de entender y requieren menos código. Los Class Components son útiles cuando necesitas características específicas del ciclo de vida de React.
🎓 Siguiente Paso
Ahora que comprendes el State, puedes:
Crear formularios con estados complejos
Implementar lógica de selección/marcado
Controlar la visibilidad de elementos
Gestionar datos que cambian con interacción del usuario
¡Practica creando componentes que cambien de color, tamaño o contenido basado en el estado!
Comentarios
Publicar un comentario