React-router(8)Link 标签 to 属性为对象时(路由信息传值)

x33g5p2x  于2022-03-06 转载在 其他  
字(1.7k)|赞(0)|评价(0)|浏览(640)

DEMO地址
参考 6.routeInfo.js

在组件里,每个组件的路由数据,都是各自独立的。

在之前分析中,已知:

  1. match 属性的值,存储的是该 Route 标签的路由;
  2. location 属性的值,其中 url 和 path 不同 Route 组件中,值是相同的;

但【2】并不准确,准确的说,自带的 hash , search , pathname 这三个属性的值,是相同的;

假如你在里面添加了其他数据,那么结果就有所不同了。

例如 Link 标签,他有一个属性 to,可以用于路径跳转。

比较常见的是以下这种写法:

  1. <Link to={`${props.match.url}/`}>子路由</Link>

但是,to 的值,也可以用对象,例如这样:

  1. <Link to={{
  2. pathname: `${this.props.match.url}/1`,
  3. myState: '这是我自定义的变量'
  4. }}>示例1</Link>

当路由信息匹配时(参照DEMO):

1、父组件的路由信息为:

  1. {
  2. "match": {
  3. "path": "/RouteInfo",
  4. "url": "/RouteInfo",
  5. "isExact": false,
  6. "params": {}
  7. },
  8. "location": {
  9. "pathname": "/RouteInfo/1",
  10. "search": "",
  11. "hash": ""
  12. },
  13. "history": {
  14. "length": 9,
  15. "action": "POP",
  16. "location": {
  17. "pathname": "/RouteInfo/1",
  18. "search": "",
  19. "hash": ""
  20. }
  21. }
  22. }

2、被传值的子组件的路由信息:

  1. {
  2. "match": {
  3. "path": "/RouteInfo/1",
  4. "url": "/RouteInfo/1",
  5. "isExact": true,
  6. "params": {}
  7. },
  8. "location": {
  9. "pathname": "/RouteInfo/1",
  10. "myState": "这是我自定义的变量",
  11. "search": "",
  12. "hash": ""
  13. },
  14. "history": {
  15. "length": 24,
  16. "action": "PUSH",
  17. "location": {
  18. "pathname": "/RouteInfo/1",
  19. "myState": "这是我自定义的变量",
  20. "search": "",
  21. "hash": ""
  22. }
  23. }
  24. }

可以看到,被传值的子组件的路由信息,location 会多了一个属性。

但是请注意,以下几种情况会导致失去这些信息:

  1. 刷新页面;
  2. 访问更深一层的子组件(因为信息被更新了);
  3. 刷新后,访问相同的 url。举例来说,你访问了该 url,传值了也收到了,然后刷新页面,再点击该 url,是没有的。原因是相同 url 跳转;

相关文章