Os voy a enseñar cómo añadir un loader para las pantallas de carga de React Native.
Para comenzar, hay que crear un nuevo componente que llamaremos Loader.js
import React, { useState } from "react";
import { View, StyleSheet } from "react-native";
import { ActivityIndicator } from 'react-native-paper';
var setMostrarLoader;
const Loader = (props) => {
var { visible } = props;
if (visible != null && visible == "false") {
visible = false;
} else if (visible != null && visible == "true") {
visible = true;
}
const [loaderVisible, setLoaderVisible] = useState(visible);
setMostrarLoader = setLoaderVisible;
return (
(loaderVisible) ?
<View style={styles.contenedor}>
<ActivityIndicator animating={true} color="#2145E6" />
</View>
: null
);
};
export default Loader;
export function mostrarLoader(estado) {
setMostrarLoader(estado);
}
const styles = StyleSheet.create({
contenedor: {
flex: 1,
justifyContent: "center",
alignItems: "center",
position: "absolute",
top: 0,
left: 0,
right: 0,
bottom: 0,
width: "100%",
height: "100%",
backgroundColor: "rgba(0,0,0,0.5)"
}
});
Ahora voy a explicar el código:
- Para crear el loader he utilizado la librería react-native-paper (https://reactnativepaper.com/), esta librería proporciona diseño basado en Material Design de Google.
Si queremos instalar esta librería tenemos que introducir en la consola el siguiente comando:npm install react-native-paper --save - He creado una propiedad para el componente, llamada visible. Recibe un String true o false con el que activa o desactiva el loader. Además igualo la variable setMostrarLoader a la función setLoaderVisible, para poder utilizarla en una función más adelante.
var { visible } = props;
if (visible != null && visible == "false") {
visible = false;
} else if (visible != null && visible == "true") {
visible = true;
}
const [loaderVisible, setLoaderVisible] = useState(visible);
setMostrarLoader = setLoaderVisible;
- Ahora muestro o no el elemento loader dependiendo del estado de la variable loaderVisible (si es true, lo muestra y si es false devuelve null a la vista).
return (
(loaderVisible) ?
<View style={styles.contenedor}>
<ActivityIndicator animating={true} color="#2145E6" />
</View>
: null
);
- Finalmente, he creado una función con la que podemos ocultar o mostrar el loader cuándo queramos. La he exportado para que se pueda utilizar fuera del componente.
export function mostrarLoader(estado) {
setMostrarLoader(estado);
}
Ahora, para usar el componente creado, tendremos que añadirlo al Screen en la que queramos utilizarlo:
import React, { useState } from "react";
import { View, StyleSheet } from
//Importamos el componente Loader creado
import Loader, { mostrarLoader } from "../componentes/Loader";
const Screen= ({ navigation }) => {
return (
<View style={styles.contenedor}>
<Loader visible="true" />
</View>
)
};
export default Screen;
const styles = StyleSheet.create({
contenedor: {
flex: 1,
alignItems: 'center',
justifyContent: 'center',
width: '100%',
}
});
Primero se importa el componente:
//Importamos el componente Loader creado
import Loader, { mostrarLoader } from "../componentes/Loader";
Después se añade al render:
<Loader visible = "true" />
Si ponemos visible = «true» se mostrará por defecto cargando. Si ponemos visible = «false» por defecto estará desactivado.
*Nota, si queremos mostrar u ocultar el loader cuando realizamos cargas o métodos Javascript llamamos a la función creada:
mostrarLoader("true") –> Para mostrar el loader
mostrarLoader("false") –> Para ocultar el loader

Ingeniero en Informática, Investigador, me encanta crear cosas o arreglarlas y darles una nueva vida. Escritor y poeta. Más de 20 APPs publicadas y un libro en Amazon.