API

路由

通过声明的方式做路由跳转。

例子:

  1. import Link from 'umi/link';
  2. export default () => {
  3. <div>
  4. /* 普通使用 */
  5. <Link to="/list">Go to list page</Link>
  6. /* 带参数 */
  7. <Link to="/list?a=b">Go to list page</Link>
  8. /* 包含子组件 */
  9. <Link to="/list?a=b"><button>Go to list page</button></Link>
  10. </div>
  11. }

umi/router

通过编程的方式做路由切换,包含以下 4 个 API 。

router.push(path)

推一个新的页面到 history 里。

例子:

  1. import router from 'umi/router';
  2. // 普通跳转,不带参数
  3. router.push('/list');
  4. // 带参数
  5. router.push('/list?a=b');
  6. router.push({
  7. pathname: '/list',
  8. query: {
  9. a: 'b',
  10. },
  11. });
  12. # 对象且不包含 pathname 会报错
  13. router.push({
  14. query: {}
  15. });

router.replace(path)

替换当前页面,参数和 router.push()) 相同。

router.go(n)

往前或往后跳指定页数。

例子:

  1. import router from 'umi/router';
  2. router.go(-1);
  3. router.go(2);

router.goBack()

后退一页。

例子:

  1. import router from 'umi/router';
  2. router.goBack();

详见:https://reacttraining.com/react-router/web/api/NavLink

umi/redirect

重定向用。

例子:

  1. import Redirect from 'umi/redirect';
  2. <Redirect to="/login" />

详见:https://reacttraining.com/react-router/web/api/Redirect

umi/prompt

例子:

  1. import Prompt from 'umi/prompt';
  2. export default () => {
  3. return (
  4. <>
  5. <h1>Prompt</h1>
  6. <Prompt
  7. when={true}
  8. message={(location) => {
  9. return window.confirm(`confirm to leave to ${location.pathname}?`);
  10. }}
  11. />
  12. </>
  13. );
  14. }

详见:https://reacttraining.com/react-router/web/api/Prompt

umi/withRouter

详见:https://reacttraining.com/react-router/web/api/withRouter

性能

umi/dynamic

动态加载组件,基于 react-loadable 实现。

dynamic(options)

例子:

  1. import dynamic from 'umi/dynamic';
  2. // 延时 1s 渲染的组件。
  3. const App = dynamic({
  4. loader: () => {
  5. return new Promise((resolve) => {
  6. setTimeout(() => {
  7. resolve(() => <div>I will render after 1s</div>);
  8. }, /* 1s */1000);
  9. }));
  10. },
  11. });
  12. // 或者用 async 语法
  13. const delay = (timeout) => new Promise(resolve => setTimeout(resolve, timeout));
  14. const App = dynamic({
  15. loader: async function() {
  16. await delay(/* 1s */1000);
  17. return () => <div>I will render after 1s</div>;
  18. },
  19. });

构建

umi/babel

让用户可基于 umi 的 babel 配置进行扩展。