umi约定式路由

4 篇文章 0 订阅

除配置式路由外,Umi 也支持约定式路由。约定式路由也叫文件路由,就是不需要手写配置,文件系统即路由,通过目录和文件及其命名分析出路由配置。

目录

动态路由

动态可选路由

嵌套路由 

跳转路由 


动态路由

约定 [] 包裹的文件或文件夹为动态路由。

users⽂件夹下的[name].js 即路由配置为/users/:name

{

    "path": "/users",

    "routes": [

      {

        "path": "/users",

        "exact": true,

        "component": require('@/pages/users/index.js').default

      },

      {

        "path": "/users/:name",

        "exact": true,

        "component": require('@/pages/users/[name].js').default

      }

    ],

    "component": require('@/pages/users/_layout.js').default

  }

  1. 在 users 目录中,再创建 [name].js、[name].css
  2. 访问 [name].js:http://localhost:8000/users/xxx

动态可选路由

约定 [ $] 包裹的文件或文件夹为动态可选路由。

  • src/pages/users/[id$].tsx 会成为 /users/:id?

嵌套路由 

Umi 里约定目录下有 _layout.js 时会生成嵌套路由,以 _layout.js 为该目录的 layout。layout 文件需要返回一个 React 组件,并通过 props.children 渲染子组件。 

import React from 'react';
import styles from './_layout.css';

export default function Page(props) {
  return (
    <div>
      <h1 className={styles.title}>Page users/_layout父组件</h1>
      <div>{props.children}</div>
    </div>
  );
}

为 _layout.js 创建子组件,users 的首页 index.js

import React from 'react';
/*  */import { Link } from "umi"
import styles from './index.css';

export default function Page() {

  return (
    <div className={styles.title}>
      <h1>用户页users下的 index页面</h1>
    </div>
  );
}

目录:

访问路由http://localhost:8000/users

跳转路由 

1.引入import {Link} from "umi"

以下为users/index.js

import React from 'react';
import {Link} from "umi"
import styles from './index.css';

export default function Page() {
  const userList = [
    { id: 1, name: 'zxt' },
    { id: 2, name: 'zzz' }
  ]
  return (
    <div className={styles.title}>
      <h1>用户页users下的 index页面</h1>
      <ul>
        {userList.map(val => (
          <li key={val.id}>
            <Link to={`/users/${val.name}`}>
            {val.name}
            </Link>
            
          </li>
        ))}
      </ul>
    </div>
  );
}

以下为users/[name].js

import React from 'react';
import styles from './[name].css';
import {history} from 'umi';

export default (props)=> {
    return (
        <div className={styles.title}>
            <h1>我是动态路由页面---详情页</h1>
            <p>欢迎来到{props.match.params.name}的详情页</p>
            <button onClick={()=>props.history.goBack()}>返回</button>
        </div>
    );
}

页面效果图:

 详细可看:约定式路由

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值