我正在寻找一种方法,当React-Router v4更改位置时修改页面标题。我曾经在 Redux 中侦听位置更改操作,并根据 metaData
对象检查该路由。
当使用React Router v4时,列表中没有固定的路由。事实上,站点周围的各个组件可以使用<code>路由
当某些主要路线发生变化时,是否有一种方法可以通过调用操作来更新页面标题,或者是否有更好的方法来更新站点的元数据?
从phen0menon的优秀答案中吸取教训,为什么不扩展Route
而不是React.Component呢
?
import React, { useEffect } from 'react';
import { Route } from 'react-router-dom';
import PropTypes from 'prop-types';
export const Page = ({ title, ...rest }) => {
useEffect(() => {
document.title = title;
}, [title]);
return <Route {...rest} />;
};
这将删除开销代码,如下所示:
// old:
<Route
exact
path="/"
render={props => (
<Page {...props} component={Index} title="Index Page" />
)}
/>
// improvement:
<Page
exact
path="/"
component={Index}
title="Index Page"
/>
更新:另一种方法是使用自定义挂钩:
import { useEffect } from 'react';
/** Hook for changing title */
export const useTitle = title => {
useEffect(() => {
const oldTitle = document.title;
title && (document.title = title);
// following line is optional, but will reset title when component unmounts
return () => document.title = oldTitle;
}, [title]);
};
在您的组件中,对每个页面执行此操作
componentDidMount() {
document.title = 'Your page title here';
}
这将改变你的页面标题,对每条路线做上述操作。
此外,如果它不仅仅是标题部分,请检查react头盔,这是一个非常整洁的库,并处理一些很好的边缘情况。
<代码>
<Route
exact
path="/"
render={props => (
<Page {...props} component={Index} title="Index Page" />
)}
/>
<Route
path="/about"
render={props => (
<Page {...props} component={About} title="About Page" />
)}
/>
在< code >页面组件中,您可以设置路线标题:
import React from "react"
/*
* Component which serves the purpose of a "root route component".
*/
class Page extends React.Component {
/**
* Here, we define a react lifecycle method that gets executed each time
* our component is mounted to the DOM, which is exactly what we want in this case
*/
componentDidMount() {
document.title = this.props.title
}
/**
* Here, we use a component prop to render
* a component, as specified in route configuration
*/
render() {
const PageComponent = this.props.component
return (
<PageComponent />
)
}
}
export default Page
更新1八月2019.这只适用于反应路由器
使用 React Hooks 更新了答案:
您可以使用下面的组件指定任何路由的标题,该组件是使用useEffects
构建的。
import { useEffect } from "react";
const Page = (props) => {
useEffect(() => {
document.title = props.title || "";
}, [props.title]);
return props.children;
};
export default Page;
然后在路由的呈现
道具中使用 Page
:
<Route
path="/about"
render={(props) => (
<Page title="Index">
<Index {...props} />
</Page>
)}
/>
<Route
path="/profile"
render={(props) => (
<Page title="Profile">
<Profile {...props} />
</Page>
)}
/>
前端有没有办法实现页面截图?不是html-to-canvas那种实现,而是类似于windows上各种截图工具那样,直接截取屏幕上图像 目前搜到的全是html-to-canvas的方案
问题内容: 根据我的研究,看来我想做的事是不可能的,但是如果情况有所变化,我想检查一下是否有人想出办法。 我有一个Web应用程序,可以根据浏览器窗口中的用户选择生成打印报告。我有一个自定义的页眉和页脚,当从浏览器打印报告时,应在每个打印的页面上重复该页眉和页脚。它不是我需要的浏览器页眉和页脚,而是我生成的自定义页眉和页脚。另外,我不认为这是CSS和媒体类型的问题,但我不是CSS专家。我没有让页眉和
问题内容: 我正在构建带有一些文本元素(例如选项卡名称)的HTML UI,这些文本元素在被选中时看起来很糟糕。不幸的是,对于用户来说,双击选项卡名称非常容易,该名称在许多浏览器中都是默认选择的。 我也许可以用JavaScript技巧解决这个问题(我也想看看那些答案),但是我真的希望CSS / HTML中的某些功能可以直接在所有浏览器中使用。 问题答案: 在大多数浏览器中,可以使用CSS来实现: 对
我有一个简单的模块化javafx应用程序。 我用 这将创建mods目录 然后,我使用命令创建运行时映像 这将在hellofx目录中创建运行时映像 现在我使用jpackage命令来创建Windows安装程序。在目录中,我有一个应用程序的图标。 此图标用于已安装的应用程序,但有没有办法为安装程序文件本身创建图标?名为HelloFX-1.0的安装程序文件没有图标。有没有办法将jpack配置为也更改此文件
大概是这样的: 谢谢[已解决] 也感谢Umer Farooq的回答:从lambda内部修改局部变量
问题内容: 假设我有一个使用lambda表达式(闭包)定义的对象列表。有没有一种方法可以检查它们以便进行比较? 我最感兴趣的代码是 完整的代码是 似乎唯一的解决方案是将每个lambda定义为一个字段,并且仅使用这些字段。如果要打印出称为的方法,最好使用。lambda表达式有更好的方法吗? 此外,是否可以打印lambda并获得人类可读的内容?如果你打印而不是 得到类似的东西 甚至使用和方法。 问题答