Diferencias entre Dimensions.get('window')
y useWindowDimensions()
-
Dimensions.get('window')
:- Es un método estático de la API
Dimensions
. - Captura las dimensiones iniciales de la ventana (
width
yheight
) en el momento en que se invoca. - Limitación: No actualiza sus valores automáticamente si el dispositivo se rota o cambia de tamaño. Es necesario volver a invocar
Dimensions.get('window')
para obtener los nuevos valores.
Ejemplo:
const dimensions = Dimensions.get('window'); const { width, height } = dimensions;
- Es un método estático de la API
-
useWindowDimensions()
:- Es un custom hook que proporciona acceso dinámico a las dimensiones actuales de la ventana.
- Se actualiza automáticamente al rotar el dispositivo o al cambiar de tamaño la pantalla.
- Ventaja: No requiere lógica adicional para detectar cambios de orientación.
Ejemplo:
const { width, height } = useWindowDimensions();
Ventajas de useWindowDimensions()
- Reactivo: Actualiza automáticamente las dimensiones en tiempo real.
- Más limpio: No requiere agregar event listeners para manejar cambios en la orientación o tamaño.
Ejemplo: Caja con el 50% del Ancho de la Pantalla
A continuación, implementamos un ejemplo práctico donde una caja toma el 50% del ancho de la pantalla. Utilizaremos el spread de estilos (...styles.purpleBox
) y sobrescribiremos el ancho con width: width * 0.5
.
import React from 'react';
import { StyleSheet, View, Text, useWindowDimensions } from 'react-native';
export const DimensionScreen = () => {
// Hook para obtener dimensiones dinámicas
const { width, height } = useWindowDimensions();
return (
<View style={styles.container}>
{/* Caja dinámica */}
<View
style={{
...styles.purpleBox, // Spread de estilos base
width: width * 0.5, // Sobrescribir el ancho dinámicamente
}}
/>
{/* Mostrar dimensiones */}
<Text style={styles.text}>
w: {width}, h: {height}
</Text>
</View>
);
};
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#e8e8e8',
justifyContent: 'center',
alignItems: 'center',
},
purpleBox: {
height: 100,
backgroundColor: 'purple',
marginBottom: 20,
},
text: {
fontSize: 16,
},
});
export default DimensionScreen;
Explicación del Código
-
Uso de
useWindowDimensions()
:- El hook proporciona las dimensiones actuales de la ventana (
width
yheight
). - Estas dimensiones se actualizan automáticamente al rotar el dispositivo.
- El hook proporciona las dimensiones actuales de la ventana (
-
Spread y Sobrescritura de Estilos:
- Se utilizan los estilos base (
...styles.purpleBox
) para mantener la consistencia. - Se sobrescribe el ancho (
width
) para ajustarlo dinámicamente al 50% del ancho de la pantalla.
- Se utilizan los estilos base (
-
Texto de Dimensiones:
- Se muestra en tiempo real el ancho y alto de la pantalla debajo de la caja morada.
Resultado Esperado
- La caja morada ocupa el 50% del ancho de la pantalla, independientemente de su orientación.
- Al rotar el dispositivo, la caja se redimensiona automáticamente gracias a
useWindowDimensions()
.