区别React-Router中match的path和url
问题
React Router开发中有关<Route>组件的match属性的两个属性path和url,容易让人混淆,特别记录于此。 解释官方描述如下:
path用来标识路由匹配的URL部分。React Router使用了Path-to-RegExp库将路径字符串转为正则表达式。然后正则表达式会匹配当前路径。 当路由路径和当前路径成功匹配,会生成一个对象match。match对象有更多关于URL和path的信息。这些信息可以通过它的属性获取,如下所示:
只有完全理解了<Route>的这个match对象属性及其有关属性,才能算是掌握了基本类型嵌套路由开发的基础部分(本人拙见,仅供参考)。 举例1我们不妨考虑一个小例子,如下所示: 观察路由"/users/:userId" 举例2根据上面的解释,match.path和match.url的值是相同的,此时你想使用哪一个都行。但是,本人建议还是遵循官方解释,在嵌套式<Link>组件中尽量使用match.url,而在嵌套式<Route>组件中尽量使用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,{ id: 2,name: "Kim",1,{ id: 3,name: "David",2] } ]; const find = id => PEEPS.find(p => p.id == id); const RecursiveExample = () => ( <Router> <Person match={{ params: { id: 0 },url: "" }} /> </Router> ); const Person = ({ match }) => { const person = find(match.params.id); return ( <div> <h3>{person.name}’s Friends</h3> <ul> {person.friends.map(id => ( <li key={id}> <Link to={`${match.url}/${id}`}>{find(id).name}</Link> </li> ))} </ul> <Route path={`${match.url}/:id`} component={Person} /> </div> ); }; export default RecursiveExample; 而在佳文https://www.sitepoint.com/react-router-v4-complete-guide/ const Products = ({ match }) => { const productsData = [ },//Rest of the data has been left out for code brevity ]; }) return( <Route path={`${match.url}/:productId`} render={ (props) => <Product data= {productsData} {...props} />}/> <Route exact path={match.url} render={() => ( <div>Please select a product.</div> )} /> </div> ) 引用1.https://www.zcfy.cc/article/react-router-v4-the-complete-guide-mdash-sitepoint-4448.html (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |