I have been learning React for the past few weeks, and I am loving it. I spent today learning react-router at https://github.com/reactjs/react-router-tutorial. After going through it and implementing a lot of it in my app, I realized that it did not cover one thing that I really need: dynamic page title.
I have googled and looked at different examples of how others have done it (e.g. react-document-title, document.title) but I finally decided to tinker on my own and see if I can come up with my own implementation. (I know… another one???)
My sample code will be added to the result of lesson 3 from the tutorial I linked above:
App.js:
import React from 'react'
import { Link } from 'react-router'
export default React.createClass({
render() {
return <div>
<h1>
React Router Tutorial
</h1>
<ul role="nav">
<li>
<Link to="/about">About</Link>
</li>
<li>
<Link to="/repos">Repos</Link>
</li>
</ul>
</div>
}
})
index.js:
import React from 'react'
import { render } from 'react-dom'
import { Router, Route, hashHistory } from 'react-router'
import App from './modules/App'
import About from './modules/About'
import Repos from './modules/Repos'
render((
<Router history={hashHistory}>
<Route path="/" component={App}/>
<Route path="/repos" component={Repos}/>
<Route path="/about" component={About}/>
</Router>
), document.getElementById('app'))
Looking at index.js, I thought why not add a title attribute on the Route nodes directly? That would be the most convenient location, in my mind.
index.js:
import React from 'react'
import { render } from 'react-dom'
import { Router, Route, hashHistory } from 'react-router'
import App from './modules/App'
import About from './modules/About'
import Repos from './modules/Repos'
render((
<Router history={hashHistory}>
<Route path="/" component={App}/>
<Route path="/repos" title="Repositories" component={Repos}/>
<Route path="/about" title="About Me" component={About}/>
</Router>
), document.getElementById('app'))
We added it to routing, but how will App get its value? This part is easy.
App.jsx:
import React from 'react'
import { Link } from 'react-router'
export default React.createClass({
render() {
return <div>
<h1>
{this.props.children.props.route.title}
</h1>
<ul role="nav">
<li>
<Link to="/about">About</Link>
</li>
<li>
<Link to="/repos">Repos</Link>
</li>
</ul>
</div>
}
})
That’s it.
Leave a reply to Kutsan Kaplan Cancel reply