내 React 애플리케이션의 문서 제목 (브라우저 제목 표시 줄)을 설정하고 싶습니다. 나는 사용하여 시도했다 반응 - 문서 제목 (구식 인 것 같다) 및 설정을 document.title
에 constructor
그리고 componentDidMount()
이러한 솔루션 작업 없음 -.
내 React 애플리케이션의 문서 제목 (브라우저 제목 표시 줄)을 설정하고 싶습니다. 나는 사용하여 시도했다 반응 - 문서 제목 (구식 인 것 같다) 및 설정을 document.title
에 constructor
그리고 componentDidMount()
이러한 솔루션 작업 없음 -.
답변:
React Helmet을 사용할 수 있습니다 .
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>
...
</>
)
}
}
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')
);
이것은 나를 위해 작동합니다.
편집 : webpack-dev-server를 사용하는 경우 인라인을 true로 설정하십시오.
React 16.8의 경우 useEffect를 사용하여 기능적 구성 요소로이를 수행 할 수 있습니다. .
예를 들면 :
useEffect(() => {
document.title = "new title"
}, []);
두 번째 인수를 배열로 사용하면 useEffect를 한 번만 호출하여 componentDidMount
.
다른 사람들이 언급했듯이 document.title = 'My new title'
및 React Helmet 을 사용하여 페이지 제목을 업데이트 할 수 있습니다 . 이 두 솔루션 모두 스크립트가로드되기 전에 초기 'React App'제목을 렌더링합니다.
초기 문서 제목을 사용 create-react-app
하는 경우 태그 파일에 설정되어 있습니다.<title>
/public/index.html
직접 편집하거나 환경 변수로 채워지는 자리 표시자를 사용할 수 있습니다.
/.env
:
REACT_APP_SITE_TITLE='My Title!'
SOME_OTHER_VARS=...
어떤 이유로 개발 환경에서 다른 타이틀을 원했다면-
/.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>
이 접근 방식은 또한 전역 process.env
개체를 사용하여 내 응용 프로그램에서 사이트 제목 환경 변수를 읽을 수 있음을 의미합니다 .
console.log(process.env.REACT_APP_SITE_TITLE_URL);
// My Title!
참조 : 사용자 지정 환경 변수 추가
'componentWillMount'의 라이프 사이클에서 문서 제목을 설정해야합니다.
componentWillMount() {
document.title = 'your title name'
},
React Portal<title>
을 사용하면 실제 React 노드 인 것처럼 루트 React 노드 외부의 요소 (예 :)에 렌더링 할 수 있습니다 . 이제 추가 종속성없이 깔끔하게 제목을 설정할 수 있습니다.
예를 들면 다음과 같습니다.
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;
페이지에 구성 요소를 넣고 다음을 설정하십시오 pageTitle
.
<Title pageTitle="Dashboard" />
<Title pageTitle={item.name} />
fullTitle
은 index.html에서 이미 찾은 콘텐츠 에만 추가된다는 사실을 깨닫기 전까지는이 솔루션을 좋아했습니다 <title>Default Title</title>
.
constructor
!).```import React from 'react'; 'prop-types'에서 PropTypes 가져 오기; 'react-dom'에서 ReactDOM 가져 오기; const titleNode = document.getElementsByTagName ( "title") [0]; titleNode.innerText = ''; 기본 클래스 내보내기 Title extends React.PureComponent {static propTypes = {children : PropTypes.node,}; constructor (props) {super (props); this.el = titleNode; } render () {return ReactDOM.createPortal (this.props.children, this.el,); }}```
React 16.13에서는 render 함수 내에서 직접 설정할 수 있습니다.
import React from 'react';
import ReactDOM from 'react-dom';
class App extends React.Component {
render() {
document.title = 'wow'
return <p>Hello</p>
}
}
ReactDOM.render(
<App />,
document.getElementById('root')
)
기능 구성 요소 :
function App() {
document.title = 'wow'
return <p>Hello</p>
}
간단히 js 파일에 함수를 만들고 구성 요소에서 사용할 수 있도록 내보낼 수 있습니다.
아래와 같이 :
export default function setTitle(title) {
if (typeof title !== "string") {
throw new Error("Title should be an string");
}
document.title = title;
}
다음과 같은 구성 요소에서 사용하십시오.
import React, { Component } from 'react';
import setTitle from './setTitle.js' // no need to js extension at the end
class App extends Component {
componentDidMount() {
setTitle("i am a new title");
}
render() {
return (
<div>
see the title
</div>
);
}
}
export default App
아래에서 다음을 사용할 수 있습니다. 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')
);
또는이 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')
);
행복한 코딩 !!!
나는 이것을 너무 철저히 테스트하지 않았지만 이것은 작동하는 것 같습니다. TypeScript로 작성되었습니다.
interface Props {
children: string|number|Array<string|number>,
}
export default class DocumentTitle extends React.Component<Props> {
private oldTitle: string = document.title;
componentWillUnmount(): void {
document.title = this.oldTitle;
}
render() {
document.title = Array.isArray(this.props.children) ? this.props.children.join('') : this.props.children;
return null;
}
}
용법:
export default class App extends React.Component<Props, State> {
render() {
return <>
<DocumentTitle>{this.state.files.length} Gallery</DocumentTitle>
<Container>
Lorem ipsum
</Container>
</>
}
}
확실하지 다른 사람들이 전체 응용 프로그램을 퍼팅에 촉각을 곤두 세우고있다 이유는 내부에 자신의 <Title>
구성 요소, 그것은 나에게 이상한 것 같다.
document.title
내부 를 업데이트하면 render()
동적 제목을 원하는 경우 새로 고침 / 최신 상태로 유지됩니다. 마운트 해제시에도 제목이 되돌아갑니다. 포털은 귀엽지 만 불필요 해 보입니다. 여기서 DOM 노드를 조작 할 필요가 없습니다.
나는이 방법을 사용하는데, 나에게 더 쉽기 때문에 알아 냈다. 기능 구성 요소와 함께 사용합니다. 사용자가 페이지에서 자바 스크립트를 비활성화 한 경우 제목이 표시되지 않도록 신경 쓰지 않는 경우에만 이렇게하십시오.
해야 할 일이 두 가지 있습니다.
1. index.html로 이동하여 여기에서이 줄을 삭제합니다.
<title>React App</title>
2. mainapp 함수로 이동하여 정상적인 html 구조 인 이것을 반환하면 웹 사이트의 주요 콘텐츠를 복사하여 body 태그 사이에 붙여 넣을 수 있습니다.
return (
<html>
<head>
<title>hi</title>
</head>
<body></body>
</html>
);
원하는대로 제목을 바꿀 수 있습니다.