Hoy vamos a crear un componente que representa un bocadillo de texto animado para React o React Native.

El componente recibirá un texto o un elemento qué represente un texto y además mostrará un puntero animado al final del texto.
import React, { useEffect, useState } from "react";
import { View, StyleSheet, Text } from "react-native";
import TextoCustom from "./TextoCustom";
interface BocadilloTextoProps {
texto: string | React.ReactNode;
mostrarPuntero?: boolean;
}
const BocadilloTexto: React.FC<BocadilloTextoProps> = ({ texto, mostrarPuntero = true }) => {
const [mostrarCursor, setMostrarCursor] = useState(true);
useEffect(() => {
if (!mostrarPuntero) return;
const interval = setInterval(() => {
setMostrarCursor((prev) => !prev);
}, 500); // Parpadeo cada 500ms
return () => clearInterval(interval);
}, [mostrarPuntero]);
return (
<View style={styles.contenedor}>
<View style={styles.bocadillo}>
<View style={styles.textoContainer}>
<TextoCustom style={styles.texto}>{texto}</TextoCustom>
{mostrarPuntero && (
<Text style={styles.cursor}>{mostrarCursor ? "▌" : " "}</Text>
)}
</View>
</View>
</View>
);
};
export default BocadilloTexto;
const styles = StyleSheet.create({
contenedor: {
alignItems: "center",
justifyContent: "center",
marginVertical: 10,
width: "100%",
},
bocadillo: {
backgroundColor: "white",
padding: 10,
borderRadius: 10,
width: "80%",
borderWidth: 2,
borderColor: "black",
shadowColor: "#000",
shadowOffset: { width: 2, height: 2 },
shadowOpacity: 0.3,
shadowRadius: 2,
elevation: 3,
},
textoContainer: {
flexDirection: "row",
alignItems: "center", // Mantiene el cursor alineado con el texto
},
texto: {
fontSize: 18,
textAlign: "left",
flexShrink: 1, // Permite que el texto se ajuste sin afectar el cursor
},
cursor: {
fontSize: 18, // Mismo tamaño del texto para evitar movimientos
fontWeight: "bold",
marginLeft: 2, // Espacio entre el texto y el cursor
},
});
Y para utilizarlo haremos esto:
<BocadilloTexto texto={"¡Hola, viajero!"} />
También podemos utilizarlo con el componente TextoAnimado animado que hemos creado en un tutorial anterior.
<BocadilloTexto texto={<TextoAnimado texto="¡Hola, viajero!" />} />

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.