Cómo cambiar el título y los metadatos con React Helmet
Introducción
React Helmet es un componente para gestionar dinámicamente las head
secciones del documento. Algunos casos de uso comunes incluyen la configuración de las etiquetas title
, description
y meta
para el documento.
Cuando se combina con la representación del lado del servidor, permite configurar meta
etiquetas que leerán los motores de búsqueda y los rastreadores de redes sociales. Esto hace que la representación del lado del servidor y React Helmet sean una combinación poderosa para crear aplicaciones que pueden beneficiarse de la optimización de motores de búsqueda (SEO) y los datos de redes sociales como oEmbed, Facebook Open Graph o Twitter Cards.
En este artículo, explorará la funcionalidad de React Helmet en una aplicación React.
Prerrequisitos
Para seguir este artículo necesitarás:
- Familiaridad con la instalación de paquetes con un administrador de paquetes como
npm
oyarn
. - Familiaridad con la importación y el uso de componentes en su proyecto React.
Nota: Este tutorial no cubrirá los pasos para crear un proyecto React ni para configurar la renderización del lado del servidor. Consulta Cómo habilitar la renderización del lado del servidor para una aplicación React .
Este tutorial fue verificado con Node v15.3.0, npm
v6.14.9, react
v17.0.1 y react-helmet
v6.1.0.
Paso 1: agregar React Helmet a su proyecto
Primero, instale el componente en su proyecto:
- npm install react-helmet@6.1.0
Ahora puedes usar React Helmet en tu aplicación agregando los elementos que deben ir en el encabezado del documento como hijos del Helmet
componente:
fuente/App.js
import { Helmet } from 'react-helmet';function App() { return ( div className="App" Helmet titleApp Title/title meta name="description" content="App Description" / meta name="theme-color" content="#008f68" / /Helmet /div );}export default App;
Luego, abre las herramientas para desarrolladores de tu navegador e inspecciona el head
elemento:
Inspect Elementhead !-- ... --- titleApp Title/title !-- ... -- meta name="description" content="App Description" data-react-helmet="true" meta name="theme-color" content="#008f68" data-react-helmet="true" !-- ... ---/head
Observa los title
elementos meta
agregados por React Helmet.
Paso 2: sobrescribir valores
Los componentes que se encuentran más abajo en el árbol pueden anular los valores proporcionados al Helmet
componente de un nivel superior.
Por ejemplo, considere un ChildComponent
que contiene un Helmet
componente que modifica title
:
src/ChildComponent.js
import React from 'react';import { Helmet } from 'react-helmet';export default function ChildComponent() { return ( div Helmet titleModified Title/title /Helmet h1Child Component/h1 /div )}
A continuación, vuelva a visitar App
el componente e incluya lo nuevo ChildComponent
:
fuente/App.js
import { Helmet } from 'react-helmet';import ChildComponent from './ChildComponent';function App() { return ( div className="App" Helmet titleApp Title/title meta name="description" content="App Description" / meta name="theme-color" content="#008f68" / /Helmet ChildComponent / /div );}
Luego, abre las herramientas para desarrolladores de tu navegador e inspecciona el head
elemento:
Inspect Elementhead !-- ... --- titleModified Title/title !-- ... -- meta name="description" content="App Description" data-react-helmet="true" meta name="theme-color" content="#008f68" data-react-helmet="true" !-- ... ---/head
Se title
cambiará de App Title
a Modified Title
. Las meta
etiquetas para los valores description
y theme-color
permanecerán iguales porque no se han sobrescrito.
Paso 3: Manejo de atributos para htmlybody
Incluso puedes incluir los elementos html
y body
si necesitas especificar atributos para ellos.
Por ejemplo, considere un body
elemento al que dark
se le aplica un tema:
fuente/App.js
import { Helmet } from 'react-helmet';function App() { return ( div className="App" Helmet titleApp Title/title meta name="description" content="App Description" / meta name="theme-color" content="#008f68" / body / /Helmet /div );}
Luego, abre las herramientas para desarrolladores de tu navegador e inspecciona el body
elemento:
[seconday_label Inspect Element]body data-react-helmet="class" !-- ... --/body
El class
se establecerá en dark
.
Paso 4: renderizado en el servidor
El beneficio completo de React Helmet se hace evidente cuando la aplicación se procesa en el servidor, de modo que la aplicación se entrega con los elementos correctos en el encabezado del documento.
Suponiendo que tiene configurada una aplicación renderizada del lado del servidor React, puede llamar renderStatic
al método de React Helmet inmediatamente después de llamar a ReactDOMServer renderToString
o renderToStaticMarkup
para obtener una instancia con propiedades para los Helmet
datos:
servidor/index.js
import React from 'react';import ReactDOMServer from 'react-dom/server';import express from 'express';import { Helmet } from 'react-helmet';import App from '../src/App';const PORT = process.env.PORT || 3006;const app = express();app.get('/*', (req, res) = { const appString = ReactDOMServer.renderToString(App /); const helmet = Helmet.renderStatic(); const html = `!DOCTYPE html html head ${helmet.title.toString()} ${helmet.meta.toString()} /head body div ${ appString } /div /body /html ` res.send(html);});app.listen(PORT);
Al llamar a Helmet, renderStatic
se devuelve una instancia con propiedades como title
y meta
. También tendrá acceso a otras propiedades como link
, script
, noscript
, style
, htmlAttributes
y bodyAttributes
.
Paso 5: renderizado asincrónico conreact-helmet-async
Como lo mencionó aquí @mxstbr de Spectrum, React Helmet funciona de manera sincrónica, lo que potencialmente puede generar problemas en el servidor, especialmente con la transmisión.
Una bifurcación de React Helmet llega al rescate: react-helmet-async
.
- npm install react-helmet-async@1.0.7
La API es la misma, con la excepción de que es HelmetProvider
necesario encapsular el árbol de componentes tanto en el cliente como en el servidor:
import Helmet, { HelmetProvider } from 'react-helmet-async';function App() { return ( HelmetProvider div className="App" Helmet titleApp Title/title meta name="description" content="App Description" / meta name="theme-color" content="#008f68" / /Helmet /div /HelmetProvider );}
Hay más información sobre la intención y el uso de React Helmet Async disponible en la publicación de anuncio en el blog Open del New York Times .
Conclusión
En este artículo, exploraste la funcionalidad de React Helmet en una aplicación React. En particular, cómo funciona bien con la representación del lado del servidor para promover integraciones de SEO y redes sociales.
Si desea obtener más información sobre React, eche un vistazo a nuestra serie Cómo codificar en React.js o consulte nuestra página de temas de React para ver ejercicios y proyectos de programación.
Deja una respuesta