- Switch可以提高路由匹配效率(单一匹配)。
这样只要匹配到了第一个就不会再往下匹配了
-
public/index.html 中 引入样式时不写
./
写/
(常用)【绝对路径】 -
public/index.html 中 引入样式时不写
./
写%PUBLIC_URL%
(常用) -
使用
HashRouter
-
默认使用的是模糊匹配(简单记:【输入的路径】必须包含要【匹配的路径】,且顺序要一致)
-
开启严格匹配:
<Route exact={true} path="/about" component={About}/>
-
严格匹配
不要随便开启
,需要再开,有些时候开启会导致无法继续匹配二级路由
一般写在所有路由注册的最下方,当所有路由都无法匹配时,跳转到Redirect指定的路由
具体编码:
===========================================================================
-
注册子路由时要写上父路由的path值
-
路由的匹配是按照注册路由的顺序进行的
Home/index.jsx
import React, { Component } from ‘react’
import { Route, NavLink,Redirect,Switch } from ‘react-router-dom’
import News from ‘./News’
import Message from ‘./Message’
export default class Home extends Component {
render() {
return (
我是Home的内容
News
Message
)
}
}
================================================================================
方法1. params参数
-
路由链接(携带参数):
<Link to='/demo/test/tom/18'}>详情</Link>
-
注册路由(声明接收):
<Route path="/demo/test/:name/:age" component={Test}/>
-
接收参数:
this.props.match.params
Message/index.jsx
import React, { Component } from ‘react’
import { Link, Route } from ‘react-router-dom’;
import Detail from ‘./Detail’;
export default class Message extends Component {
state = {
messageArr: [
{ id: ‘01’, title: ‘消息1’ },
{ id: ‘02’, title: ‘消息2’ },
{ id: ‘03’, title: ‘消息3’ },
]
}
render() {
const { messageArr } = this.state;
return (
{
messageArr.map((msgObj) => {
return (
-
{/* 向路由组件传递params参数 */}
{msgObj.title})
})
}
{/* 声明接收params参数 */}
)
}
}
Detail/index.jsx
import React, { Component } from ‘react’
export default class Detail extends Component {
state = {
detailData : [
{ id: ‘01’, content: ‘你好啊’ },
{ id: ‘02’, content: ‘还不错鸭’ },
{ id: ‘03’, content: ‘显示我吧’ }
]
}
render() {
console.log(this.props)
// 接收params参数
const { id, title } = this.props.match.params
const findResult= this.state.detailData.find((dataObj) => {
return dataObj.id === id
})
return (
- ID: {id }
- Title: {title }
- Content: { findResult.content}
)
}
}
方法2. search参数
-
路由链接(携带参数):
<Link to='/demo/test?name=tom&age=18'}>详情</Link>
-
注册路由(无需声明,正常注册即可):
<Route path="/demo/test" component={Test}/>
-
接收参数:
this.props.location.search
-
备注:获取到的
search
是urlencoded
编码字符串,需要借助querystring
解析
import qs from ‘querystring’
let obj = {name:‘tom’, age:18}
console.log(qs.stringify(obj)) // name=tom&age=18
let str = ‘carName=Benz&price=199’
console.log(qs.parse(str)) // {carName: ‘Benz’, price: 199}
方法3. state参数
-
路由链接(携带参数):
<Link to={{ pathname:'/demo/test', state:{name:'tom',age:18} }}>详情</Link>
-
注册路由(无需声明,正常注册即可):
<Route path="/demo/test" component={Test}/>
-
接收参数:
this.props.location.state
-
备注:刷新也可以保留住参数【history对象记录着在】
Message/index.jsx
export default class Message extends Component {
render() {
const {messageArr} = this.state
return (
{
messageArr.map((msgObj)=>{
return (
-
{/* 向路由组件传递params参数 */}
{/* <Link to={
/home/message/detail/${msgObj.id}/${msgObj.title}
}>{msgObj.title} */}{/* 向路由组件传递search参数 */}
{/* <Link to={
/home/message/detail/?id=${msgObj.id}&title=${msgObj.title}
}>{msgObj.title} */}{/* 向路由组件传递state参数 */}
{msgObj.title})
})
}
{/* 声明接收params参数 */}
{/* */}
{/* search参数无需声明接收,正常注册路由即可 */}
{/* */}
{/* state参数无需声明接收,正常注册路由即可 */}
)
}
}
Detail/index.jsx
import React, { Component } from ‘react’
// import qs from ‘querystring’
export default class Detail extends Component {
render() {
console.log(this.props);
// 接收params参数
// const {id,title} = this.props.match.params
// 接收search参数
// const {search} = this.props.location
// const {id,title} = qs.parse(search.slice(1))
// 接收state参数
const {id,title} = this.props.location.state || {}
const findResult = DetailData.find((detailObj)=>{
return detailObj.id === id
}) || {}
return (
- ID:{id}
- TITLE:{title}
- CONTENT:{findResult.content}
)
}
}
=============================================================================
借助
this.prosp.history
对象上的API对操作路由跳转、前进、后退-
this.prosp.history.push(path, [state])
将新条目推入历史记录堆栈 -
this.prosp.history.replace(path, [state])
替换历史记录堆栈上的当前条目 -
this.prosp.history.go()
将历史堆栈中的指针移动n个条目 -
this.prosp.history.goBack()
等同于 go(-1) -
this.prosp.history.goForward()
等同于 go(1)
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
最后
如果你已经下定决心要转行做编程行业,在最开始的时候就要对自己的学习有一个基本的规划,还要对这个行业的技术需求有一个基本的了解。有一个已就业为目的的学习目标,然后为之努力,坚持到底。如果你有幸看到这篇文章,希望对你有所帮助,祝你转行成功。
CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
外链图片转存中…(img-RITfBip0-1711716825571)]
[外链图片转存中…(img-9F40AXIW-1711716825572)]
[外链图片转存中…(img-SG9mFLAp-1711716825573)]
[外链图片转存中…(img-uxdhDmn5-1711716825573)]
[外链图片转存中…(img-ymMVcajN-1711716825573)]既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
[外链图片转存中…(img-bB6hEEoQ-1711716825574)]最后
如果你已经下定决心要转行做编程行业,在最开始的时候就要对自己的学习有一个基本的规划,还要对这个行业的技术需求有一个基本的了解。有一个已就业为目的的学习目标,然后为之努力,坚持到底。如果你有幸看到这篇文章,希望对你有所帮助,祝你转行成功。
-