Je souhaite définir le titre du document (dans la barre de titre du navigateur) pour mon application React. J'ai essayé d'utiliser react-document-title (semble obsolète) et de régler document.title
dans les constructor
et componentDidMount()
- aucune de ces solutions ne fonctionne.
import React from 'react'
import ReactDOM from 'react-dom'
class Doc extends React.Component{
componentDidMount(){
document.title = "dfsdfsdfsd"
}
render(){
return(
<b> test </b>
)
}
}
ReactDOM.render(
<Doc />,
document.getElementById('container')
);
Cela fonctionne pour moi.
Edit: Si vous utilisez webpack-dev-server, définissez inline sur true
Vous pouvez utiliser React Helmet ainsi:
import React from 'react'
import { Helmet } from 'react-helmet'
const TITLE = 'My Page Title'
class MyComponent extends React.PureComponent {
render () {
return (
<>
<Helmet>
<title>{ TITLE }</title>
</Helmet>
...
</>
)
}
}
vous devez définir le titre du document dans le cycle de vie de 'composantWillMount':
componentWillMount() {
document.title = 'your title name'
},
Vous pouvez utiliser ce qui suit ci-dessous avec document.title = 'Home Page'
import React from 'react'
import { Component } from 'react-dom'
class App extends Component{
componentDidMount(){
document.title = "Home Page"
}
render(){
return(
<p> Title is now equal to Home Page </p>
)
}
}
ReactDOM.render(
<App />,
document.getElementById('root')
);
ou Vous pouvez utiliser ce package npm npm i react-document-title
import React from 'react'
import { Component } from 'react-dom'
import DocumentTitle from 'react-document-title';
class App extends Component{
render(){
return(
<DocumentTitle title='Home'>
<h1>Home, sweet home.</h1>
</DocumentTitle>
)
}
}
ReactDOM.render(
<App />,
document.getElementById('root')
);
Bonne codage !!!
Comme d'autres l'ont mentionné, vous pouvez utiliser document.title = 'My new title'
et React Helmet pour mettre à jour le titre de la page. Les deux solutions restitueront toujours le titre initial de "React App" avant le chargement des scripts.
Si vous utilisez create-react-app
, le titre du document initial est défini dans le fichier <title>
tag /public/index.html
.
Vous pouvez le modifier directement ou utiliser un espace réservé qui sera rempli à partir de variables environnementales:
/.env
:
REACT_APP_SITE_TITLE='My Title!'
SOME_OTHER_VARS=...
Si pour une raison quelconque je voulais un titre différent dans mon environnement de développement -
/.env.development
:
REACT_APP_SITE_TITLE='**DEVELOPMENT** My TITLE! **DEVELOPMENT**'
SOME_OTHER_VARS=...
/public/index.html
:
<!DOCTYPE html>
<html lang="en">
<head>
...
<title>%REACT_APP_SITE_TITLE%</title>
...
</head>
<body>
...
</body>
</html>
Cette approche signifie également que je peux lire la variable environnementale de titre de site depuis mon application à l'aide de l'objet global process.env
, qui est Nice:
console.log(process.env.REACT_APP_SITE_TITLE_URL);
// My Title!
React Portals peut vous permettre de restituer des éléments en dehors du noeud React racine (tel que <title>
), comme s'il s'agissait de noeuds React réels. Alors maintenant, vous pouvez définir le titre proprement et sans aucune dépendance supplémentaire:
Voici un exemple:
import React, { Component } from 'react';
import ReactDOM from 'react-dom';
class Title extends Component {
constructor(props) {
super(props);
this.titleEl = document.getElementsByTagName("title")[0];
}
render() {
let fullTitle;
if(this.props.pageTitle) {
fullTitle = this.props.pageTitle + " - " + this.props.siteTitle;
} else {
fullTitle = this.props.siteTitle;
}
return ReactDOM.createPortal(
fullTitle || "",
this.titleEl
);
}
}
Title.defaultProps = {
pageTitle: null,
siteTitle: "Your Site Name Here",
};
export default Title;
Il suffit de placer le composant dans la page et de définir pageTitle
:
<Title pageTitle="Dashboard" />
<Title pageTitle={item.name} />