create-react-app 基于ts项目,使用react-router-dom搭建项目
准备工作
- 来个react项目 create-react-app 基于TS的项目
 - ts项目安装后 删除node_modules,重新 
yarn install, 不然jsx会报错 - 安装React-router-dom
 
yarn add react-router-dom
npm install --save react-router-dom
npm i --save-dev @types/react-router-dom
React-router-dom + React-router 功能对比
React-router
实现了路由的核心功能
React-router-dom
基于React-router,加入了一些在浏览器运行下的一些功能,
- Link组件会渲染一个a标签,
 - BrowserRouter使用 HTML5 提供的 history API可以保证你的 UI 界面和 URL 保持同步,
 - HashRouter使用 URL 的 hash 部分保证你的 UI 界面和 URL 保持同步
 
开始搭建
创建routers文件夹

创建pages文件夹(放所有的页面)

写的第一个页面

导出所有页面

// 路由懒加载
import { lazy } from 'react'
const Home = lazy(() => import('./home'))
export {
  Home
}
配置路由

import {
  Home,
} from '../pages'
export type RouterType = {
  path: string,
  component: React.LazyExoticComponent<any>,
  root: string[],
  notExect?: boolean,
}
const HomeRouter: RouterType = {
  path: '/home',
  component: Home,
  root: [],
}
// 总路由
const Routers: RouterType[] = ([
  HomeRouter,
])
export {
  Routers
}
配置index.tsx

import React, { Suspense } from 'react'
import ReactDOM from 'react-dom'
import App from './App'
import { BrowserRouter, Route, Switch } from 'react-router-dom'
ReactDOM.render(
  <BrowserRouter>
    {/* 使用了路由懒加载,所以需要使用<Suspense>包起来 */}
    <Suspense fallback={<div></div>}>
      <Switch>
        <Route path="/" render={routerProps => {
          return <App {...routerProps}/>
        }}/>
      </Switch>
    </Suspense>
  </BrowserRouter>,
  document.getElementById('root')
)
配置App.tsx

import React from 'react'
import { Redirect, Route, Switch, withRouter } from 'react-router-dom'
import { Home } from './pages'
import { Routers } from './routers'
function App () {
  return (
      <Switch>
        {
          Routers.map(router => (
            <Route
              exact={!router.notExect}
              key={router.path}
              path={router.path}
              component={router.component}
            >
            </Route>
          ))
        }
        {/* 设置默认路由 推荐方法一*/}
        {/* 方法一 */}
        {/* <Route path="/" component={Home} exact></Route> */}
        {/* 方法二 重定向*/}
        <Redirect path="/" to="/home" />
      </Switch>
  )
}
export default withRouter(App)
多个路由文件怎么办?
pages的index.ts增加引入

routers下新增base.ts文件

routers下index.ts增加引入

多路由文件配置完成

结尾
本人react也是在学习中,有问题可以在下方评论,我看见了会回复
create-react-app 基于ts项目,使用react-router-dom搭建项目的更多相关文章
- 将Abp移植进.NET MAUI项目(一):搭建项目
		
 前言 去年12月份做了MAUI混合开发框架的调研,想起来文章里给自己挖了个坑,要教大家如何把Abp移植进Maui项目,由于篇幅限制,将分为三个章节. 将Abp移植进.NET MAUI项目(一):搭 ...
 - webpack4.x 从零开始配置vue 项目(一)基础搭建项目
		
序 现在依旧记得第一次看到webpack3.x 版本配置时候的状态 刚开始看到这些真的是一脸懵.希望这篇文章能帮到刚开始入门的同学. webpack 是什么? webpack是一个模块化打包工具,w ...
 - Vue/Egg大型项目开发(一)搭建项目
		
项目Github地址:前端(https://github.com/14glwu/stuer)后端(https://github.com/14glwu/stuer-server) 项目线上预览:http ...
 - 七天接手react项目 系列 —— react 脚手架创建项目
		
其他章节请看: 七天接手react项目 系列 react 脚手架创建项目 前面我们一直通过 script 的方式学习 react 基础知识,而真实项目通常是基于脚手架进行开发. 本篇首先通过 reac ...
 - [Poi] Customize Babel to Build a React App with Poi
		
Developing React with Poi is as easy as adding the babel-preset-react-appto a .babelrc and installin ...
 - 新建 vue项目时报错,无法成功搭建项目
		
之前电脑已经安装 Node环境和 vue-cli脚手架,但是过段时间没有使用,然后现在用 vue-cli 搭建项目的时候,启动服务器的时候报错,无法启动成功,摸索半天,发现是因为 Node和vue-c ...
 - create react app 项目部署在Spring(Tomcat)项目中
		
网上看了许多,大多数都是nginx做成静态项目,但是这样局限性太多,与Web项目相比许多服务端想做的验证都很麻烦,于是开始了艰难的探索之路,终于在不经意间试出来了,一把辛酸... 正常的打包就不说了. ...
 - 深入 Create React App 核心概念
		
本文差点难产而死.因为总结的过程中,多次怀疑本文是对官方文档的直接翻译和简单诺列:同时官方文档很全面,全范围的介绍无疑加深了写作的心智负担.但在最终的梳理中,发现走出了一条与众不同的路,于是坚持分享出 ...
 - Create React App
		
Facebook开源了React前端框架(MIT Licence),也同时提供了React脚手架 - create-react-app. create-react-app遵循约定优于配置(Coc)的原 ...
 - 如何扩展 Create React App 的 Webpack 配置
		
如何扩展 Create React App 的 Webpack 配置 原文地址https://zhaozhiming.github.io/blog/2018/01/08/create-react-a ...
 
随机推荐
- OAuth 2.0授权框架详解
			
目录 简介 OAuth的构成 refresh Token Authorization Code模式 隐式授权 Resource Owner 授权密码认证 Client 认证授权 github的OAut ...
 - 纯干货分享!2020阿里java岗笔试面试题总结(附答案)
			
前言 2020金九银十马上结束,现为大家整理了这次金九银十面试阿里的面试题总结,都是我从朋友那拿到的面试真题,话不多说,满满的干货分享给大家! int a=10是原子操作吗? 是的. 注意点: i+ ...
 - 如何用Prometheus监控十万container的Kubernetes集群
			
概述 不久前,我们在文章<如何扩展单个Prometheus实现近万Kubernetes集群监控?>中详细介绍了TKE团队大规模Kubernetes联邦监控系统Kvass的演进过程,其中介绍 ...
 - ThreadLocal以及强软弱虚引用
			
1.ThreadLocal ThreadLocal即线程本地,可以实现每个线程存入取出TreadLocal值互不影响.因为TheadLocal底层是用了一个Map结构存放数据,而这个Map是从当前这个 ...
 - 看完这篇还不会 Elasticsearch 搜索,那我就哭了!
			
本文主要介绍 ElasticSearch 搜索相关的知识,首先会介绍下 URI Search 和 Request Body Search,同时也会学习什么是搜索的相关性,如何衡量相关性. Search ...
 - linux(cemtos7.x)安装docker
			
卸载旧版本 yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest ...
 - 怎样安装Arch Linux以及Deepin桌面环境
			
一.概述 Arch Linux 是一个轻量级的Linux发行版本,实际上,Arch Linux提供给用户很多选择,用户可以自定义自己的安装过程,不x像其他很多的Linux发行版本,安装过程甚至是一个只 ...
 - DNS、IP地址、子网掩码和默认网关
			
一.DNS服务器 DNS是指:域名服务器(Domain Name Server).在Internet上域名与IP地址之间是一一对应的,域名虽然便于人们记忆,但机器之间只能互相认识IP地址,它们之间的转 ...
 - java42
			
1.Random类 随机生成某个整数 Random r = new Random(); System.out.println(r.nextInt()); 伪随机数:第一次打印为随机,再次运行,数字将保 ...
 - 记一次MySQL出现Waiting for table metadata lock的原因、排查过程与解决方法
			
任务背景:将sql文件通过shell直接导入到mysql中执行(还原) bug表现:导入后java项目卡死 过程: 1.网上乱搜一通,无意间看到一篇文章,这篇文章说明了如何开启mysql的genera ...