Renderizado en React
Proceso de Renderizado
React utiliza un enfoque innovador para actualizar la interfaz de usuario:
- Renderizado Inicial: ReactDOM.render() convierte componentes en nodos del DOM
- DOM Virtual: Representación ligera en memoria del árbol de componentes
- Re-renderizado: Cuando el estado cambia, se genera un nuevo DOM virtual
- Diffing: Compara el nuevo DOM virtual con el anterior
- Reconciliación: Actualiza solo las partes necesarias del DOM real
Ejemplo Básico:
Eficiencia del DOM Virtual
El DOM virtual proporciona varias ventajas clave:
- Rendimiento: Minimiza operaciones costosas en el DOM real
- Abstracción: Simplifica la programación declarativa
- Portabilidad: Puede renderizar en diferentes entornos (web, móvil, etc.)
Comparación de Rendimiento:
Tiempo relativo de actualización para 1000 elementos
Componentes de Función
Los componentes funcionales son la forma moderna y preferida de crear componentes en React:
- Definidos como funciones JavaScript/TypeScript
- Pueden usar Hooks para manejar estado y efectos
- Más simples y concisos que los de clase
- Mejor optimización por el compilador
// Componente funcional con TypeScript
interface GreetingProps {
name: string;
age?: number; // Prop opcional
}
const Greeting: React.FC<GreetingProps> = ({ name, age }) => {
return (
<div>
<h1>Hola, {name}!</h1>
{age && <p>Tienes {age} años</p>}
</div>
);
};
Componentes de Clase
Los componentes de clase fueron la forma original de crear componentes con estado:
- Definidos como clases ES6 que extienden React.Component
- Usan el método render() para devolver JSX
- Manejan estado a través de this.state y this.setState()
- Tienen métodos de ciclo de vida como componentDidMount()
// Componente de clase con TypeScript
interface CounterState {
count: number;
}
class Counter extends React.Component<{}, CounterState> {
state: CounterState = { count: 0 };
increment = () => {
this.setState(prevState => ({
count: prevState.count + 1
}));
};
render() {
return (
<div>
<p>Contador: {this.state.count}</p>
<button onClick={this.increment}>Incrementar</button>
</div>
);
}
}
Fundamentos de JSX
JSX es una extensión de sintaxis para JavaScript que permite escribir HTML en código React:
- No es HTML: Es azúcar sintáctico que se transpila a JavaScript
- Reglas básicas:
- Elementos deben cerrarse: <div /> o <div></div>
- Atributos usan camelCase: className en lugar de class
- Estilo se pasa como objeto: style={{ color: 'red' }}
- Expresiones JavaScript: Se incluyen con { }
JSX vs HTML
Diferencias clave entre JSX y HTML tradicional:
Característica | HTML | JSX |
---|---|---|
Atributo class | class="container" | className="container" |
Estilos en línea | style="color: red;" | style={{ color: 'red' }} |
Eventos | onclick="handleClick()" | onClick={handleClick} |
Valores booleanos | disabled="true" | disabled={true} |
Mejor Práctica:
Usa el plugin ESLint eslint-plugin-react
para mantener consistencia en tu código JSX y detectar errores comunes.