Gatsby静态网站导航高亮

 

Gatsby 是一款基于 React 和 GraphQL 的静态文档生成器。

思路:

获取路由,根据路由显示导航高亮;

this.props.location.pathname 获取路由;

若this.props.location.pathname获取不到值,可用window.location.pathname获取;

// layouts index.js

import React, { Component } from "react"
import PropTypes from 'prop-types'
import Helmet from 'react-helmet' // 设置站点的title
import './reset.css'
import './index.css'
import Header from '../components/header'
import Footer from '../components/footer'

class Layout extends Component {
  render() {
    const { children } = this.props;
    const { location } = window; // 获取路由
    return (
      <div className='wrapper'>
        <Helmet>
            <meta charSet="utf-8" />
            <title>title</title>
        </Helmet>
        <div className='content-wrapper'>
          <div className='content'>
            <Header location={ location }></Header>
            <div className='content'>
              {children}
            </div>
            <Footer></Footer>
          </div>
        </div>
      </div>
    )
  }
}

Layout.propTypes = {
  children: PropTypes.node.isRequired,
}

export default Layout
// components/header.js
// location.pathname获取路由,根据路由导航显示高亮

import React from 'react'
import { Link } from 'gatsby'
import './header.css'

const Header = ({ location }) => (
  <header className='header'>
    <div className='wrapper'>
      <div className='logo-wrapper'>
        <div className='img'>
          <img src={'/img/logo.png'} alt='logo'/>
        </div>
      </div>
      <div className='nav-list'>
        <ul>
          <li>
            <Link className={location.pathname === "/" ? 'active' : ''} to="/">首页</Link>
          </li>
          <li>
            <Link className={location.pathname.match(/\/About/i) ? 'active' : ''} to="/About/about">关于</Link>
          </li>
          <li>
            <Link className={location.pathname.match(/\/Business/i) ? 'active' : ''} to="/Business/business">业务</Link>
          </li>
          <li>
            <Link className={location.pathname.match(/\/News/i) ? 'active' : ''} to="/News/news">新闻</Link>
          </li>
          <li>
            <Link className={location.pathname.match(/\/Partner/i) ? 'active' : ''} to="/Partner/partner">合作</Link>
          </li>
          <li>
            <Link className={location.pathname.match(/\/Contact/i) ? 'active' : ''} to="/Contact/contact">联系</Link>
          </li>
        </ul>
      </div>
    </div>
  </header>
)
export default Header

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值