react+typescript+router框架搭建笔记

剃刀锋利,越之不易;
智者有云,得渡人稀。
——《迦陀奥义书》

这次的React框架搭建并没有按照全新造轮子的方式进行,而是根据官方给出的脚手架进行添砖加瓦。
参考资料create-react-app,react-router-dom

安装create-react-app

平时工作中用的VUE更多,这次搭建react框架,使用nvm新安装了node v11.15.0的版本,在当前版本安装了最新create-react-app

npm install -g create-react-app
react+typescript+router框架搭建笔记_第1张图片

CREATE DEMO项目

不使用typescript命令

npm create-react-app react-frame-demo

使用typescript命令

npm create-react-app my-app --template typescript

# or

yarn create react-app my-app --template typescript

开发环境配置proxy

用npm 或 yarn 安装http-proxy-middleware

$ npm install http-proxy-middleware --save
$ # or
$ yarn add http-proxy-middleware

创建文件setupProxy.js,在src下面,其中内容

const proxy = require('http-proxy-middleware');

module.exports = function(app) {
  app.use(
    '/api/*',
    proxy({
      target: 'https://www.fastmock.site/mock/02e5a37115fa75c7c564bca4cb4d7829/',
      changeOrigin: true,
    })
  );
};

添加环境变量environment variables

创建文件.env.development,.env.production
变量名以REACT_APP开头

REACT_APP_NODE_ENV='development'
REACT_APP_HTTPBASEURL='/api'

添加CSS RESET

yarn add postcss-normalize

在index.css添加

@import-normalize; /* bring in normalize.css styles */

添加ROUTER

由于使用的typescript,使用路由需要添加两个包react-router-dom,@types/react-router-dom

yarn add react-router-dom
yarn add @types/react-router-dom

封装路由

路由配置:router/index.ts

import Home from '../views/Home';
import About from '../views/About';
import Link from '../views/Link';
import Other from '../views/Other';

const routes = [
  {
    path: '/home',
    component: Home
  },
  {
    path: '',
    component: Other,
    routes: [
      {
        path: '/about',
        component: About
      },
      {
        path: '/link',
        component: Link
      }
    ]
  }
];

export default routes;

定义route interface:assets/interface.ts

interface routeInterface {
  path: string,
  component: any,
  routes?: Array
}

export type RouteInterface = routeInterface

路由方法 assets/common.tsx

import React from 'react';
import {
  Route
} from 'react-router-dom';
import { RouteInterface } from './interface';

const RouteWithSubRoutes = (route: RouteInterface, index: number) => {
  return (
     (
        
      )}
    />
  );
}

export {
  RouteWithSubRoutes
}

调用路由App.tsx

最后在页面使用,调用路由方法显示解析各个组件页面。

import React from 'react';
import {
  BrowserRouter as Router,
  Switch,
  Link
} from 'react-router-dom';
import routes from './router';
import { RouteWithSubRoutes } from './assets/common';
import { RouteInterface } from './assets/interface';

const App: React.FC = () => {
  return (
    
      
  • Home 首页
  • About 关于
  • Link 联系
{routes.map((route: RouteInterface, i: number) => { return RouteWithSubRoutes(route, i) })}
); } export default App;

完整DEMO地址

react+typescript+router框架搭建笔记_第2张图片

你可能感兴趣的:(react+typescript+router框架搭建笔记)