区别React-Router中match的path和url-创新互联

问题

React Router开发中有关组件的match属性的两个属性path和url,容易让人混淆,特别记录于此。

10年积累的网站制作、网站建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站制作后付款的网站建设流程,更有蓟州免费网站建设让你可以放心的选择与我们合作。

解释

官方描述如下:

  • path - (string) The path pattern used to match. Useful for building nested s
  • url - (string) The matched portion of the URL. Useful for building nested s

path用来标识路由匹配的URL部分。React Router使用了Path-to-RegExp库将路径字符串转为正则表达式。然后正则表达式会匹配当前路径。

当路由路径和当前路径成功匹配,会生成一个对象match。match对象有更多关于URL和path的信息。这些信息可以通过它的属性获取,如下所示:

  • match.url.返回URL中匹配部分的字符串。用于创建嵌套的很有用。
  • match.path.用于匹配路径模式。用来创建嵌套的
  • match.isExact.返回布尔值,如果准确(没有任何多余字符)匹配则返回true。
  • match.params.返回一个对象包含Path-to-RegExp包从URL解析的键值对。

只有完全理解了的这个match对象属性及其有关属性,才能算是掌握了基本类型嵌套路由开发的基础部分(本人拙见,仅供参考)。

举例1

我们不妨考虑一个小例子,如下所示:

观察路由"/users/:userId"
此例中,match.path的返回值将是 "/users/:userId"。
而match.url 的返回值将是:userId的值,例如"users/5"。
请注意上面官方描述中,match.path指用于匹配的模式部分,代表了一种格式,而match.url代表一个具体的计算后的路径表达值。

举例2

根据上面的解释,match.path和match.url的值是相同的,此时你想使用哪一个都行。但是,本人建议还是遵循官方解释,在嵌套式组件中尽量使用match.url,而在嵌套式组件中尽量使用match.path。
从官方网站也会观察到上面混合使用情况。

在Recursive Paths部分,你会观察到如下代码:

import React from "react";
import { BrowserRouter as Router, Route, Link } from "react-router-dom";

const PEEPS = [
  { id: 0, name: "Michelle", friends: [1, 2, 3] },
  { id: 1, name: "Sean", friends: [0, 3] },
  { id: 2, name: "Kim", friends: [0, 1, 3] },
  { id: 3, name: "David", friends: [1, 2] }
];

const find = id => PEEPS.find(p => p.id == id);

const RecursiveExample = () => (
  
    
  
);

const Person = ({ match }) => {
  const person = find(match.params.id);

  return (
    

{person.name}’s Friends

    {person.friends.map(id => (
  • {find(id).name}
  • ))}
); }; export default RecursiveExample;

而在佳文https://www.sitepoint.com/react-router-v4-complete-guide/
中也使用了混合使用的情况(见“Demo 3: Nested routing with Path parameters”一节):

const Products = ({ match }) => {

const productsData = [
{
id: 1,
name: 'NIKE Liteforce Blue Sneakers',
description: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin molestie.',
status: 'Available'

},

//Rest of the data has been left out for code brevity

];
/* Create an array of <li> items for each product
var linkList = productsData.map( (product) => {
return(


  • ${match.url}/${product.id}}>
    {product.name}


  • )

    })

    return(




    Products


      {linkList}


     }/>
         (
            
    Please select a product.
    )} />

    )
    }

    引用

    1.https://www.zcfy.cc/article/react-router-v4-the-complete-guide-mdash-sitepoint-4448.html
    2.https://teamtreehouse.com/community/what-is-the-difference-between-path-and-url-in-match-prop-of-reactrouter-route-component-react-router-basics
    3.https://reacttraining.com/react-router/

    另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


    标题名称:区别React-Router中match的path和url-创新互联
    链接地址:http://azwzsj.com/article/dgsjci.html