探討Link與NavLink


<Link>:

  <Link>是一個元素,允許用戶通過單擊或點擊它來導航到另一個頁面,渲染在頁面,我們可以看見它自動轉換成<a href>標簽,並沒有點擊樣式

import React, { Component } from 'react'
import { Link } from 'react-router-dom'

export default class App extends Component {
  render() {
    return (
        <div>
            <Link className="list-group-item" to="/about">About</Link>
            <Link className="list-group-item" to="/home">Home</Link>
        </div>
    )
  }
}

 我們可以看出在頁面中沒有點擊導航高亮顯示效果的

 

<NavLink>:

  <NavLink>在構建導航菜單時,它會自動顯示當前選擇了哪項菜單,渲染到頁面成<a href>並自動添加了一個active的類名

import React, { Component } from 'react'
import { NavLink } from 'react-router-dom'

export default class App extends Component {
  render() {
    return (
        <div>
            <NavLink className="list-group-item" to="/about">About</NavLink >
            <NavLink className="list-group-item" to="/home">Home</NavLink >
        </div>
    )
  }
}

我們可以看到在頁面點擊導航高亮顯示效果的

 

修改默認點擊樣式

修改默認的點擊樣式,選中菜單的樣式,例如修改背景色

在react-router-dom@6版本以前,例如5.xx版本

<NavLink activeClassName="isactive" className="list-group-item" to="/about">About</NavLink>
// 或者 <NavLink activeStyle={{ background: "green" }} className="list-group-item" to="/home">Home</NavLink>

而在@6版本,已經棄用了 activeClassName 與 activeStyle

<NavLink className={ ({ isActive }) => "list-group-item" + (isActive ? " isactive":"")} to="/about">About</NavLink>
// 或者 <NavLink style={({ isActive }) => ({ color: isActive ? 'green' : 'blue' })} to="/home">Home</NavLink>

如果我們要修改選中樣式,會發現每一個NavLink標簽有太多重復的內容,這時候就可以對NavLink標簽進行二次封裝

在頁面中直接調用我們封裝的NavLink組件

// 封裝的NavLink
import MyNavLink from './components/MyNavLink'

<MyNavLink to="/home">Home</MyNavLink>
<MyNavLink to="/about">About</MyNavLink>

在src/components/MyNavLink

在封裝的NavLink組件中,打印傳遞過來的props,可以發現標簽中的,內容直接以children存在props中

import React, { Component } from 'react'
import { NavLink } from 'react-router-dom'

export default class MyNavLink extends Component {
  render() {
    console.log(this.props);
    return (
      <NavLink className={ ({isActive}) => "list-group-item" + (isActive ? " isactive":"")} {...this.props} />
    )
  }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM