React手册之Link和NaviLink区别

Link:点击是url会直接更新,组件会重新渲染而不是重新加载

它可以是对象也可以是字符串但是最后都会转为location对象的

点击Link后,路由系统发生了什么?

Link 组件最终会渲染为 HTML 标签 <a>虽然 Link 被渲染为超链接,但在内部实现上使用脚本拦截 

浏览器的默认行为,然后调用了history.pushState 方法(注意,文中出现的 history 指的是通过 	 

history 包里面的 create*History 方法创建的对象,window.history 则指定浏览器原生的 history 对

象,由于有些 API 相同,不要弄混)。history 包中底层的 pushState 方法支持传入两个参数 state 

和 path,在函数体内有将这两个参数传输到 createLocation 方法中,最终返回location,系统会将 上述 location 对象作为

参数传入到 TransitionTo 方法中,然后调用 window.location.hash 或者window.history.pushState() 

修改了应用的 URL,这取决于你创建 history 对象的方式。同时会触发history.listen 中注册的事件监

听器

location对象

location = {
  pathname, // 当前路径,即 Link 中的 to 属性
  search, // search
  hash, // hash
  state, // state 对象
  action, // location 类型,在点击 Link 时为 PUSH,浏览器前进后退时为 POP,调用 replaceState 方法时为 REPLACE
  key, // 用于操作 sessionStorage 存取 state 对象
}

NaviLink是对Link进行了二次封装

它引入了Link然后对其添加了相关属性
 NavLink.propTypes = {
    ...Link.propTypes,//Link原有功能
    "aria-current": ariaCurrentType,
    activeClassName: PropTypes.string,//设置选中样式,默认值为active
    activeStyle: PropTypes.object,//当元素被选中时,为此元素添加样式
    className: PropTypes.string,//class名
    exact: PropTypes.bool,//为true时,只有当导致和完全匹配class和style才会应用
    isActive: PropTypes.func,//)判断链接是否激活的额外逻辑的功能
    location: PropTypes.object,
    strict: PropTypes.bool,
    style: PropTypes.object
  };

参考文档

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值