Busca en todas las páginas de la documentación
🤖 Read the SystemsArchitect.io Blog for over 100+ cloud architecture articles 🔥
Instala React Icons para acceder a miles de ícones de familias de ícones populares a través de un único paquete. Cada familia de ícones utiliza un prefijo de dos letras y su propia ruta de importación para tree-shaking.
npm install react-icons// app/components/icon-sampler.tsx
"use client";
import { FaGithub, FaTwitter } from "react-icons/fa";
import { MdEmail, MdSettings } from "react-icons/md";
import { HiOutlineSearch } from "react-icons/hi";
import { FiMenu } from "react-icons/fi";
export function IconSampler() {
return (
<div className="flex items-center gap-4 text-2xl">
<FaGithub />
<FaTwitter className="text-blue-400" />
<MdEmail className="text-red-500" />
<MdSettings className="text-gray-600" />
<HiOutlineSearch />
<FiMenu />
</div>
);
}| Prefijo | Conjunto de Ícones | Cantidad de Ícones | Estilo |
|---|---|---|---|
| Fa | Font Awesome 5 | 1,600+ | Sólido y regular |
| Fa6 | Font Awesome 6 | 2,000+ | Sólido, regular, marcas |
| Md | Material Design | 4,300+ | Relleno y delineado |
| Hi | Heroicons v1 | 450+ | Contorno y sólido |
| Hi2 | Heroicons v2 | 600+ | Contorno, sólido, mini |
| Fi | Feather Icons | 280+ | Basado en trazo |
| Bs | Bootstrap Icons | 1,800+ | Relleno y contorno |
| Ai | Ant Design | 780+ | Relleno y delineado |
| Si | Simple Icons (marcas) | 2,500+ | Logos de marca |
| Tb | Tabler Icons | 4,600+ | Basado en trazo |
| Lu | Lucide | 1,400+ | Basado en trazo |
Una barra de enlaces de redes sociales utilizando ícones de múltiples familias:
// app/components/social-links.tsx
"use client";
import { FaGithub, FaLinkedinIn, FaYoutube } from "react-icons/fa";
import { FaXTwitter } from "react-icons/fa6";
import { SiBluesky, SiDiscord } from "react-icons/si";
import { IconContext } from "react-icons";
interface SocialLink {
href: string;
icon: React.ElementType;
label: string;
hoverColor: string;
}
const socialLinks: SocialLink[] = [
{ href: "https://github.com/username", icon: FaGithub, label: "GitHub", hoverColor: "hover:text-gray-900" },
{ href: "https://x.com/username", icon: FaXTwitter, label: "X (Twitter)", hoverColor: "hover:text-black" },
{ href: "https://linkedin.com/in/username", icon: FaLinkedinIn, label: "LinkedIn", hoverColor: "hover:text-blue-700" },
{ href: "https://youtube.com/@username", icon: FaYoutube, label: "YouTube", hoverColor: "hover:text-red-600" },
{ href: "https://bsky.app/profile/username", icon: SiBluesky, label: "Bluesky", hoverColor: "hover:text-blue-500" },
{ href: "https://discord.gg/invite", icon: SiDiscord, label: "Discord", hoverColor: "hover:text-indigo-500" },
];
export function SocialLinksBar() {
return (
<IconContext.Provider value={{ size: "1.5rem" }}>
<nav aria-label="Social media links" className="flex items-center gap-6">
{socialLinks.map(({ href, icon: Icon, label, hoverColor }) => (
<a
key={label}
href={href}
target="_blank"
rel="noopener noreferrer"
aria-label={label}
className={`text-gray-500 transition-colors ${hoverColor}`}
>
<Icon />
</a>
))}
</nav>
</IconContext.Provider>
);
}react-icons/fa, react-icons/md, etc.).font-size y color de su padre por defecto (usando 1em y currentColor).IconContext.Provider te permite establecer size, color, className y style por defecto para todos los ícones descendientes sin repetir props.Estilo global con IconContext:
import { IconContext } from "react-icons";
export function IconProvider({ children }: { children: React.ReactNode }) {
return (
<IconContext.Provider
value={{
size: "1.25rem",
className: "inline-block align-middle",
style: { verticalAlign: "middle" },
}}
>
{children}
</IconContext.Provider>
);
}Comparando el impacto del tamaño del paquete:
// BUENO: importa solo FaGithub (~1KB)
import { FaGithub } from "react-icons/fa";
// MALO: aún importa solo FaGithub, pero algunas configuraciones de empaquetador más antiguas
// pueden no realizar tree-shaking correctamente
import { FaGithub } from "react-icons";Siempre importa desde la ruta de familia específica (react-icons/fa) en lugar de la raíz del paquete.
React.ComponentType<IconBaseProps>.IconBaseProps extiende SVGAttributes<SVGElement> y añade size, color, title y className.IconContext está tipado como React.Context<IconBaseProps>.import type { IconType } from "react-icons";
interface NavItem {
icon: IconType;
label: string;
href: string;
}react-icons (la raíz) en lugar de una subruta como react-icons/fa puede empaquetar la librería completa en algunas configuraciones. Siempre usa la ruta de importación específica de la familia.IconContext usa React Context, por lo que el componente proveedor debe ser un Client Component en Next.js App Router.size acepta una cadena (como "1.5rem") o número. Cuando se usa un número, se asigna a píxeles.| Enfoque | Ventajas | Desventajas |
|---|---|---|
| React Icons | Un paquete para muchas familias de ícones | Tamaño de instalación grande en disco, potencial inflación de paquete |
| Lucide React | Mejor tree-shaking, estilo consistente | Solo un estilo de ícono |
| Librería de ícones directa (@heroicons/react) | Paquete oficial, integración más estricta | Solo una familia de ícones por paquete |
| Sprites SVG | Paquete más pequeño posible | Configuración manual, sin API de componente |
Cada familia tiene su propia ruta de importación usando un prefijo de dos letras:
import { FaGithub } from "react-icons/fa"; // Font Awesome
import { MdEmail } from "react-icons/md"; // Material Design
import { HiOutlineSearch } from "react-icons/hi"; // Heroiconssize, color, className y style por defecto para todos los ícones descendientes.react-icons/fa, react-icons/md) para tree-shaking adecuado.1em para tamaño y currentColor para color.font-size y color de su elemento padre automáticamente.IconContext.import type { IconType } from "react-icons";
interface NavItem {
icon: IconType;
label: string;
href: string;
}IconType es equivalente a React.ComponentType<IconBaseProps>.
IconBaseProps extiende SVGAttributes<SVGElement>.size, color, title y className.IconContext está tipado como React.Context<IconBaseProps>.<IconContext.Provider
value={{
size: "1.25rem",
className: "inline-block align-middle",
style: { verticalAlign: "middle" },
}}
>
{children}
</IconContext.Provider>"1.5rem") como números.Tb) tiene la mayoría con 4,600+ ícones.Md) le sigue con 4,300+ ícones.Revisado por Chris St. John·Última actualización: 19 jul 2026
🤖 Read the SystemsArchitect.io Blog for over 100+ cloud architecture articles 🔥