我想为我的React应用程序设置文档标题(在浏览器标题栏中)。我尝试使用react-document-title(似乎已过期)并在document.title
和constructor
中设置componentDidMount()
- 这些解决方案均无效。
答案 0 :(得分:49)
$desiredInputs = array('username','password','etc');
$errors = [];
foreach ($desiredInputs as $input) {
if(!isset($_POST[$input]) || empty(trim($_POST[$input])){
$errors[] = $input.' is not set or empty';
}
}
这适合我。
编辑:如果您正在使用webpack-dev-server设置内联为true
答案 1 :(得分:19)
您可以使用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>
...
</>
)
}
}
答案 2 :(得分:9)
在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>
}
答案 3 :(得分:6)
您应该在&#39; componentWillMount&#39;的生命周期中设置文档标题:
componentWillMount() {
document.title = 'your title name'
},
答案 4 :(得分:4)
自React 16.8起。您可以构建一个自定义的钩子来做到这一点(类似于@Shortchange的解决方案):
export function useTitle(title) {
useEffect(() => {
const prevTitle = document.title
document.title = title
return () => {
document.title = prevTitle
}
})
}
这可以在任何反应组件中使用,例如:
const MyComponent = () => {
useTitle("New Title")
return (
<div>
...
</div>
)
}
一旦安装组件,它将立即更新标题,并在卸载时将其还原为上一个标题。
答案 5 :(得分:2)
React Portals可以让您渲染到根React节点之外的元素(例如<title>
),就好像它们是实际的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} />
答案 6 :(得分:2)
您可以将以下内容与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')
);
快乐编码!
答案 7 :(得分:2)
您可以使用ReactDOM并更改<title>
标签
ReactDOM.render(
"New Title",
document.getElementsByTagName("title")[0]
);
答案 8 :(得分:2)
对于这个问题,您有多种选择,我强烈建议您使用 React Helmet
或使用 useEffect
创建挂钩。除了编写自己的钩子,您还可以使用 react-use
中的钩子:
import React from 'react';
import { Helmet } from 'react-helmet';
const MyComponent => () => (
<Helmet>
<title>My Title</title>
</Helmet>
)
import React from 'react';
import { useTitle } from 'react-use';
const MyComponent = () => {
useTitle('My Title');
return null;
}
答案 9 :(得分:1)
就像其他人提到的那样,您可以使用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!
答案 10 :(得分:1)
const setTitle = (title) => {
const prevTitle = document.title;
document.title = title;
return () => document.title = prevTitle;
}
const MyComponent = () => {
useEffect(() => setTitle('Title while MyComponent is mounted'), []);
return <div>My Component</div>;
}
这是我今天工作时提出的一个非常简单的解决方案。 setTitle
返回一个将标题重置为使用setTitle
之前的功能的函数,它在React的useEffect
钩子中非常有效。
答案 11 :(得分:0)
我还没有对它进行彻底的测试,但这似乎可行。用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节点。
答案 12 :(得分:0)
只需在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
答案 13 :(得分:0)
对于React 16.8,您可以使用useEffect对功能组件进行此操作。
例如:
useEffect(() => {
document.title = "new title"
}, []);
将第二个参数作为数组使用时,只会调用useEffect一次,使其类似于componentDidMount
。
答案 14 :(得分:0)
我使用这种方法,后来发现了它,因为它对我来说比较容易。 我将其与功能组件结合使用。 仅执行此操作,如果您不在乎用户禁用页面上的Javascript不会显示任何标题。
您需要做两件事。
1。进入您的index.html并在此处删除此行
<title>React App</title>
2。进入您的mainapp函数并返回它,它只是一个普通的html结构,您可以将网站的主要内容复制并粘贴到body标签之间:
return (
<html>
<head>
<title>hi</title>
</head>
<body></body>
</html>
);
您可以根据需要替换标题。
答案 15 :(得分:0)
最简单的方法是使用 react-document-configuration
npm install react-document-configuration --save
示例:
import React from "react";
import Head from "react-document-configuration";
export default function Application() {
return (
<div>
<Head title="HOME" icon="link_of_icon" />
<div>
<h4>Hello Developers!</h4>
</div>
</div>
);
};```
答案 16 :(得分:0)
animation-iteration-count: infinite;
答案 17 :(得分:-1)
我想在我的常见问题页面使用页面标题。所以我为此使用了 react-helmet。
首先我使用 npm i react-helmet
安装了 react-helmet然后我在返回中添加了标签,如下所示:
import React from 'react'
import { Helmet } from 'react-helmet'
const PAGE_TITLE = 'FAQ page'
export default class FAQ extends Component {
render () {
return (
{ PAGE_TITLE } This is my faq page ) } }
答案 18 :(得分:-4)
如果您是初学者,只需将其保存到React Project文件夹的公用文件夹中,然后在“ index.html”中编辑标题并将其放入即可。不要忘记保存,它会反映出来。