Comment puis-je garder document.titre mis à jour à Réagir application?
Depuis Réagir n'ont pas intégré de façon de gérer document.title
, j'ai utilisé à l'intérieur de componentDidMount
de mon itinéraire gestionnaires.
Mais maintenant, j'ai besoin de modifier le titre basé sur state
extraites de manière asynchrone. J'ai commencé à mettre assingments en componentDidUpdate
, mais chaque maintenant et puis j'ai oublier de mettre document.title
cession de certaines pages, et le titre précédent, autour de bâtons jusqu'à ce que j'ai finalement remarqué.
Idéalement, j'aimerais un moyen d'exprimer document.title
de manière déclarative, sans avoir à assigner. Une sorte de “faux” composants serait probablement plus pratique, étant donné que je veux être en mesure de préciser le titre du document à plusieurs niveaux d'imbrication:
- Sur haut niveau (le titre par défaut);
- Sur le niveau de la page (pour certaines pages, mais pas de tous);
- Parfois, à l'intérieur d'un composant (par exemple, utilisateur de taper dans un champ).
Exigences supplémentaires:
- Titre dans enfant doit ignorer le titre spécifié par le parent;
- Fiable (ce qui garantit un nettoyage de changement d'itinéraire);
- Ne doit pas émettre des DOM (c'est à dire pas de hacks avec le composant de retour
<noscript>
); - Je suis l'aide de réagir-routeur, mais c'est mieux si ce composant fonctionne avec d'autres routeurs trop.
Tout ce que je peux utiliser?
- Quel est le problème viens de l'avoir
document.title = this.state.documentTitle
dans votre fonction rendu? Ou de faire quelque chose de similaire avec un chèque de changements. - Tout d'abord, vous ne devriez pas le faire dans
render
, il est censé ne pas avoir d'effets secondaires. Tu veux sans doute direcomponentDidUpdate
. Eh bien, comme l'application grandit, il devient plus difficile de garderdocument.title
la même si vous voulez qu'il soit présent pour certains écrans, mais l'utilisation du titre par défaut pour les autres. Prend seulement une page d'oublier de spécifier le titre, et il devient obsolète.
Vous devez vous connecter pour publier un commentaire.
J'ai écrit réagissent-document-titre juste pour ça.
Il fournit de manière déclarative pour spécifier
document.title
dans une single page app.Si vous souhaitez obtenir de titre sur le serveur après avoir rendu les composants de la chaîne, appel
DocumentTitle.rewind()
.Caractéristiques
<noscript>
;props
etstate
;Exemple
En supposant que vous utilisez quelque chose comme réagir-routeur:
Source
Je garder la trace de montée cas et uniquement utiliser
title
donné vers le hautDocumentTitle
dans la montée de l'instance de la pile à chaque fois qu'il se met à jour, est monté ou démonté. Sur le serveur,componentWillMount
des feux mais on n'obtient pasdidMount
ouwillUnmount
, si nous introduisonsDocumentTitle.rewind()
qui retourne une chaîne de caractères et détruit l'état de préparation de la prochaine demande.Prendre un coup d'oeil à la NFL réagir-casque.
et puis
<Layout title="My Title"/>
facile!Essayer réagir-frozenhead, c'est en fait plus sophistiqué que de réagir-document-titre - cela nous permet de modifier le titre, la description et rien d'autre dans l'article.
Pendant ce temps, 3 ans se sont écoulés! 😉
Si vous voulez manipuler les autres en-têtes de page de titre (comme la description, canonique, etc.), réagir-document-meta MNP de la dépendance pourrait être une bonne chose à utiliser.