新的反应js,我需要做标题常见,需要根据路线变化更改标题。我需要创建header.jsx文件并导入它吗?或者如何用路由呈现标题(公共文件)? 我的路由部分看起来像这样。
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App.jsx';
import Home from './Home.jsx';
import { Router, Route, Link, browserHistory, IndexRoute } from 'react-router';
ReactDOM.render((
<Router history = {browserHistory}>
<Route path = "/home" component = {Home} />
<Route path = "/" component = {App}>
</Route>
</Router>
));
答案 0 :(得分:24)
这应该有效:
header.jsx:
class Header extends Component {
render() {
return (<div>Your header</div>);
}
}
第一page.jsx:
class FirstPage extends Component {
render() {
return (<div>First page body</div>);
}
}
第二page.jsx
class SecondPage extends Component {
render() {
return (<div>Second page body</div>);
}
}
app.jsx:
import Header from './header.jsx';
class App extends Component {
render() {
return (
<div>
<Header />
{this.props.children}
</div>
);
}
}
网络app.jsx:
import App from './app.jsx';
import FirstPage from './first-page.jsx';
import SecondPage from './second-page.jsx';
ReactDOM.render(
<Router history = {browserHistory}>
<Route path = "/" component = {App}>
<Route path = "/first" component = {FirstPage}>
<Route path = "/second" component = {SecondPage}>
</Route>
</Router>
);
答案 1 :(得分:2)
试试这个https://www.npmjs.com/package/react-helmet
import React from "react";
import Helmet from "react-helmet";
export default function Application () {
return (
<div className="application">
<Helmet title="My Title" />
...
</div>
);};
答案 2 :(得分:1)
因此,如果您需要在路线中显示一个公共标题,可以采取几种方法。一个是你可以在自己的组件中定义标题。简单的例子:
import React from 'react';
export default React.createClass({
render() {
return <div className='header'><h1>{this.props.title}</h1></div>;
}
}
然后在您的主组件,应用程序组件等中。在每个文件的顶部导入后,只需将其放入render()内。
另一个选择是创建自己的容器组件,仍然使用我们在上面定义的Header组件:
import React from 'react';
export default React.createClass({
render() {
return (
<div className='container'>
<Header title={this.props.title} />
{this.props.children}
</div>
);
}
}
然后你宣布你的路线:
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App.jsx';
import Home from './Home.jsx';
import Container from './Container.jsx';
import { Router, Route, Link, browserHistory, IndexRoute } from 'react-router';
ReactDOM.render((
<Router history = {browserHistory}>
<Route path = "/home" component = {<Container title='home'><Home /></Container>} />
<Route path = "/" component = {<Container title='app'><App /></Container>}>
</Route>
</Router>
));
不可否认,我没有尝试过第二种选择。如果要执行router.transitionTo('/path')
之类的操作,则可能必须将路由器作为参数从容器组件传递到子组件的使用。
如果你不想在任何地方重复,这只是一个选择。