[后端入手React系列]02 项目框架

255 阅读2分钟

「这是我参与2022首次更文挑战的第9天,活动详情查看:2022首次更文挑战

项目结构

创建完项目之后,也成功访问到欢迎界面。现在主要是想把它改造成自己的项目结构。了解整个项目的路由和渲染过程。

先了解下整个项目的结构

02-structure.png

.
├── dist/                          // 默认的 build 输出目录
├── mock/                          // mock 文件所在目录,基于 express                 
└── src/                           // 源码目录,可选
    ├── layouts/index.tsx           // 全局布局
    ├── pages/                     // 页面目录,里面的文件即路由
        ├── .umi/                  // dev 临时目录,需添加到 .gitignore
        ├── .umi-production/       // build 临时目录,会自动删除
        ├── document.ejs           // HTML 模板
        ├── index.css                 // index 页面的样式文件
        ├── index.tsx               // 页面 1,任意命名,导出 react 组件
        ├── _tests_                // 用例文件,umi test 会匹配所有 .test.js 和 .e2e.js 结尾的文件
    ├── global.css                 // 约定的全局样式文件,自动引入,也可以用 global.less
├── .umirc.js                      // umi 配置,同 config/config.js,二选一
├── .env                           // 环境变量
└── package.json

路由 和 component

首页的渲染是在pages文件目录下的 index.tsx。umi 约定 pages 下所有的 jsjsxtstsx 文件即路由。打开配置文件 .umirc.js,可以看到如下的路由配置:

 routes: [
    {
      path: '/',
      component: '../layouts/index',
      routes: [
        { path: '/', component: '../pages/index' }
      ]
    }
  ],

component 指向的路由组件文件是从/src/pages 开始。它就是配置 location 和 path 匹配后用于渲染的 React 组件路径。

在React 中所有页面是由不同的组件构成,页面的切换其实就是不同组件的切换,你只需要在配置中把不同的路由路径和对应的组件关联上。

所以当请求 http://localhost:8000/ 路径的时候,其实就是先匹配到path='/',指向到的 /pages/index

TypeScript中使用 antd

import React from 'react';
import styles from './index.css';
​
const BasicLayout: React.FC = props => {
  return (
    <div className={styles.normal}>
      <h1 className={styles.title}>Yay! Welcome to umi!</h1>
      {props.children}
    </div>
  );
};
​
export default BasicLayout;
​
  • React.FC是函数式组件,是在TypeScript使用的一个泛型,FC就是FunctionComponent的缩写

    • 提供了类型检查和自动完成的静态属性:displayNamepropTypesdefaultProps
    • 函数组件是一个纯函数,它接收一个props对象返回一个react元素
    • 可直接执行函数返回结果,无 this 无生命周期,无状态
    • 只能访问输入的 props
  • React.Component 是类组件

    • 定义 class 组件,需要继承 React.Component
    • 类组件需要继承React.Component,并创建render函数返回react元素
    • 需要实例化
    • 类组件有this,有生命周期,有状态state

\