动态路由

动态路由

新建英雄详情页面

使用umi创建页面

  1. $ umi g page herodetail/ename
  2. create src/pages/herodetail/ename.js
  3. create src/pages/herodetail/ename.css

重命名herodetail/ename.js

./src/pages/herodetail/ename.js =>./src/pages/herodetail/$ename.js umi 里约定,带 $ 前缀的目录或文件为动态路由

在页面中取得动态路由传参

  1. export default function ({ match }) {
  2. // isExact: true
  3. // params:
  4. // ename: "123"
  5. // path: "/herodetail/:ename"
  6. // url: "/herodetail/123"
  7. console.log(match);
  8. return (
  9. <div className={styles.normal}>
  10. <h1>herodetail Page ename</h1>
  11. </div>
  12. );
  13. }

动态路由的参数通过match,这里打印的值,如上述标注。相当于this.props.match。 上述是约定式路由的用法,如果你是使用配置式路由,那你可以设置

  1. { path: '/herodetail/:ename', component: './pages/herodetail/$ename.js' },

访问http://localhost:8000/herodetail/123

WX20181224-223213@2x.png | center | 747x215

可选的动态路由

新建文件 ./src/pages/hero/\$ename\$.js

  1. export default function ({ match }) {
  2. console.log(match);
  3. return (
  4. <div >
  5. <h1>herodetail ename Page ename</h1>
  6. </div>
  7. );
  8. }

hero page 的目录结构如下

  1. .
  2. ├── $ename$.js
  3. ├── components
  4. └── FreeHeroItem.js
  5. ├── index.js
  6. ├── index.less
  7. ├── models
  8. └── hero.js
  9. └── services

访问http://localhost:8000/hero

WX20181224-222916@2x.png | center | 747x356

访问http://localhost:8000/hero/123

WX20181224-223119@2x.png | center | 747x240

两种都可以实现动态路由,可用于需要在url中传参的情况,一般情况下如详情页。 第二种方式,比较大的优点是可以复用hero的model。 这里我们的英雄详情页,使用第一种方式,因为我们的详情页内容比较多。分文件比较清晰。 你可以根据你自己的需要进行选择。 我们两种形式的文件都会保留着。后续使用 ./src/pages/herodetail/ 目录下的文件完成英雄详情页。

代码回顾:这节课的全部代码