{renderRoutes(routes)}
, document.getElementById(‘root’)
);
需要注意的是,Home有嵌套路由,则需要在Home中再写一遍renderRoutes,并且 renderRoutes(routes)的routes是在props中获取的,即应该写成renderRoutes(props.route.routes)。
import { Button } from “antd”
import { renderRoutes } from ‘react-router-config’
function Home(props: any) {
console.log(props);
const { routes } = props.route
return (
Home
{
renderRoutes(routes)
}
);
}
export default Home;
这样就实现了
安装 react-loadable
npm i react-loadable @type/react-loadable
使用方式,官方文档已经给出
根据例子创建LoadableComponent.tsx文件
import * as React from ‘react’;
import Loadable from ‘react-loadable’;
import {LoadingComponentProps} from ‘react-loadable’;
import {PageLoading} from ‘components/Loading’;
function Loading(props: LoadingComponentProps) {
if (props.error) {
return “Error! Component failed to load”;
} else {
return ;
}
}
const LoadableComponent = (component: any) => Loadable({
loader: component,
loading: Loading,
});
export default LoadableComponent;
其中components/Loading
// components/Loading
import { Spin } from ‘antd’;
import ‘./style.less’;
export function PageLoading() {
return
;}
//./style.less
.m-page-loading {
text-align: center;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
}
现在就可以引入 router/router.js中引用
// import Root from ‘pages/App’
// import Home from ‘pages/Home’
import Test from ‘pages/Home/test’
import Detail from ‘pages/Detail’
import LoadableComponent from ‘LoadableComponent’;
const routes = [
{
path: ‘/’,
label: ‘首页’,
exact: true,
component: LoadableComponent(() => import(‘pages/App’)),
},
{
path: ‘/detail’,
label: ‘书籍’,
component: Detail
},
{
path: ‘/home’,
label: ‘书籍’,
component: LoadableComponent(() => import(‘pages/Home’)),
routes: [
{
path: ‘/home/test’,
label: ‘书籍test’,
component: Test
}
]
},
]
export default routes
我们这里Home 使用了按需加载模式,Detail没有,来试一下有没有成功
Home
import { Button } from “antd”
import { renderRoutes } from ‘react-router-config’
console.log(“home”);
function Home(props: any) {
const { routes, } = props.route
console.log(props);
return (
Home
{
renderRoutes(routes)
}
);
}
export default Home;
在Home和Detail文件加个console.log看看。
发现只打印了detail,没打印home,说明按需加载成功。
/**
-
Global Reset of all HTML Elements
-
Resetting all of our HTML Elements ensures a smoother
-
visual transition between browsers. f you don’t believe me,
-
try temporarily commenting out this block of code, then go
-
and look at Mozilla versus Safari, both good browsers with
-
a good implementation of CSS. The thing is, all browser CSS
-
defaults are different and at the end of the day if visual
-
consistency is what we’re shooting for, then we need to
-
make sure we’re resetting all spacing elements.
*/
html,
body {
border: 0;
font-family: “Helvetica-Neue”, “Helvetica”, Arial, sans-serif;
line-height: 1.5;
margin: 0;
padding: 0;
}
div,
span,
object,
iframe,
img,
table,
caption,
thead,
tbody,
tfoot,
tr,
td,
article,
aside,
canvas,
details,
figure,
hgroup,
menu,
nav,
footer,
header,
section,
summary,
mark,
audio,
video {
border: 0;
margin: 0;
padding: 0;
}
h1,
h2,
h3,
h4,
h5,
h6,
p,
blockquote,
pre,
a,
abbr,
address,
code,
del,
dfn,
em,
ins,
q,
samp,
small,
strong,
sub,
sup,
b,
i,
hr,
dl,
dt,
dd,
ol,
ul,
li,
fieldset,
legend,
label {
border: 0;
font-size: 100%;
vertical-align: baseline;
margin: 0;
padding: 0;
}
article,
aside,
canvas,
figure,
figure img,
figcaption,
hgroup,
footer,
header,
nav,
section,
audio,
video {
display: block;
}
table {
border-collapse: separate;
border-spacing: 0;
caption,
th,
td {
text-align: left;
vertical-align: middle;
}
}
a img {
border: 0;
}
// project custom
- {
word-break: break-all;
}
h2 {
font-size: 28px;
margin-bottom: 35px;
}
h3 {
font-size: 24px;
margin-bottom: 20px;
}
h4 {
font-size: 20px;
margin-bottom: 10px;
}
h5 {
font-size: 16px;
margin-bottom: 6px;
}
/* scrollbar */
::-webkit-scrollbar {
width: 8px;
height: 8px;
background: transparent;
z-index: 999;
}
::-webkit-scrollbar-track {
//background: #31a0ee;
}
::-webkit-scrollbar-thumb {
background: rgba(144, 147, 153, 0.3);
border-radius: 4px;
}
#root {
height: 100vh;
min-height: 100vh;
}
在入口文件引入
import ReactDOM from ‘react-dom’;
// import ‘antd/dist/antd.css’;
import { BrowserRouter as Router } from ‘react-router-dom’;
import routes from ‘router/router.js’
import { renderRoutes } from ‘router/renderRouter’
import “./reset.less”
ReactDOM.render(
{renderRoutes(routes)}
, document.getElementById(‘root’)
);
<meta
name=“description”
content=“抓不住爱情的我 总是眼睁睁看她溜走 世界上幸福的人到处有 为何不能算我一个”
/>
You need to enable JavaScript to run this app.
其中,这两个是为了优化seo
<meta
name=“description”
content=“抓不住爱情的我 总是眼睁睁看她溜走 世界上幸福的人到处有 为何不能算我一个”
/>
这个是优化移动端浏览器的顶部
创建constants\serviceUrl.ts文件统一放 api的url
const SERVICE_URL = ‘http://localhost:5001/api’;
// const MOCK_URL = ‘/mockApi’;
export const BASE_URL = SERVICE_URL + ‘’;
// user
export const USER_LOGIN_URL = ${BASE_URL}/user/login
;
export const USER_REGISTER_URL = ${BASE_URL}/user/signup
;
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
最后
小编的一位同事在校期间连续三年参加ACM-ICPC竞赛。从参赛开始,原计划每天刷一道算法题,实际上每天有时候不止一题,一年最终完成了 600+:
凭借三年刷题经验,他在校招中很快拿到了各大公司的offer。
入职前,他把他的刷题经验总结成1121页PDF书籍,作为礼物赠送给他的学弟学妹,希望同学们都能在最短时间内掌握校招常见的算法及解题思路。
整本书,我仔细看了一遍,作者非常细心地将常见核心算法题和汇总题拆分为4个章节。
CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
而对于有时间的同学,作者还给出了他结合众多数据结构算法书籍,挑选出的一千多道题的解题思路和方法,以供有需要的同学慢慢研究。
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算
法题,实际上每天有时候不止一题,一年最终完成了 600+:**
凭借三年刷题经验,他在校招中很快拿到了各大公司的offer。
入职前,他把他的刷题经验总结成1121页PDF书籍,作为礼物赠送给他的学弟学妹,希望同学们都能在最短时间内掌握校招常见的算法及解题思路。
整本书,我仔细看了一遍,作者非常细心地将常见核心算法题和汇总题拆分为4个章节。
CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
而对于有时间的同学,作者还给出了他结合众多数据结构算法书籍,挑选出的一千多道题的解题思路和方法,以供有需要的同学慢慢研究。
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算