**<NavLink> **
可以理解为 **<Link> **
的升级版,该链接被点击时会追加一个 **active**
样式—高亮效果,写标签时可以加上 activeClassName
来设置样式类名(使用了bootstrap时可能会造成冲突,此时可以设置自己写的样式权重为最高—在后面加上!important
来解决这个问题)
className
是NavLink
一开始展示时样式类名activeClassName
是NavLink
被点击后展示的样式类名
封装 NavLink
为什么要封装这个玩意
有时一个应用中需要多个 NavLink ,此时就会发现 大量的 NavLink 标签中的各个属性几乎都相同—全都是优化空间啊~!
<NavLink activeClassName="my-active"className="list-group-item"to="./about">About</NavLink>
<NavLink activeClassName="my-active"className="list-group-item"to="./home">Home</NavLink>
//这这这那那那全都是一样的不是么
要注意的知识点
- 二次封装
- 多个 props 直接用
{...this.props}
展开运算符来传入参数 - 标签体内容是特殊的标签属性:也就是说标签体内容其实也是可以当作 props 中的一项传入组件定义的。在props中,名为
children
,意味着你可以在标签传属性时传入children="xxx"
来控制标签体内容,也可以在组件定义中的标签体内容直接调**{this.props.children}**
。很明显,最简单好写的方法是前者。code
二次封装的 NavLink 一般组件 ```javascript import React, { Component } from ‘react’ import { NavLink } from ‘react-router-dom’
export default class MyNavLink extends Component {
render() {
return (
//
**在 App,js 中调用**
```javascript
<MyNavLink to="./xx" children="test"></MyNavLink>