1
0
Fork 0
mirror of https://github.com/terribleplan/next.js.git synced 2024-01-19 02:48:18 +00:00
next.js/test/integration/with-router/components/header-nav.js
Jacob Page 498f37e33f Support events emitter for router (#4726)
Fixes #4679 
* Document usage of `events` router property
* Expose `events` in the `router` context object
2018-07-05 14:41:18 +02:00

53 lines
1 KiB
JavaScript

import * as React from 'react'
import { withRouter } from 'next/router'
import Link from 'next/link'
const pages = {
'/a': 'Foo',
'/b': 'Bar'
}
class HeaderNav extends React.Component {
constructor ({ router }) {
super()
this.state = {
activeURL: router.asPath
}
this.handleRouteChange = this.handleRouteChange.bind(this)
}
componentDidMount () {
this.props.router.events.on('routeChangeComplete', this.handleRouteChange)
}
componentWillUnmount () {
this.props.router.events.off('routeChangeComplete', this.handleRouteChange)
}
handleRouteChange (url) {
this.setState({
activeURL: url
})
}
render () {
return (
<nav>
{
Object.keys(pages).map(url => (
<Link href={url} key={url} prefetch>
<a className={this.state.activeURL === url ? 'active' : ''}>
{ pages[url] }
</a>
</Link>
))
}
</nav>
)
}
}
export default withRouter(HeaderNav)