react-router3 - 利用 path-to-regexp 实现路径及参数的匹配

上节代码也看到了, 在判断的时候,是直接拿 props上传的 path 和 监听到的 pathname作的全等比较
在这里插入图片描述
那这样的话,如果手动传入 /about/1, /about/page/2 这样的路径就匹配不到了, 肯定会返回 null 的,

path-to-regexp仓库
在这里插入图片描述

path-to-regexp部分用法

// pathToRegexp(str, [], {})传3个参数, 要匹配的字符串目标,一个数组,最后是一个对象
const { pathToRegexp } = require("path-to-regexp");
// {end: false} 非严格匹配,只要有部分一样就可以通过, 如果是true,就是严格匹配
let regxp = pathToRegexp('/home', [], { end: false });
console.log(regxp);
console.log(regxp.test('/home')); // true
console.log(regxp.test('/home/2')); // true
console.log(regxp.test('/home/app/10')); // true

regulex-正则解析图形化

代码演示

修改 Route.js 里的路径判断

加入正则匹配库

import React, { PureComponent } from 'react';
import Context from './Context';
import { pathToRegexp } from 'path-to-regexp';
class Route extends PureComponent {
  static contextType = Context;
  render() {
    // 获取到用户传入的path 和 组件
    const { component: RouteComponent, path, exact = false } = this.props;
    // 获取到监听到的变化后的hash值
    const { pathname } = this.context.location;
    // 比较, 如果相等,就渲染对应的组件,否则,渲染null
    let regexp = pathToRegexp(path, [], { end: exact });
    return pathname.match(regexp) ? <RouteComponent /> : null;
  }
}

export default Route;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值