React —— 路由

下载 npm install react-router-dom -S

react-router-dom 提供的子组件

1.BrowserRouter 跳转模式 vue中的history模式

属性:		类型

{
1.basename 字符 basename= “/react” 在所有位置的基本URL后面添加/react
2.forceRefresh 布尔 forceRefresj = true 是否调整时强制刷新
}

2.HashRouter 约定跳转模式,为hash模式 在地址上拼接一个#

3.NavLink 声明式跳转 有跳转激活状态 (如果对路由跳转有更多要求建议使用NavLink)

4.Link 声明式跳转 --push 没有激活状态 (虽然功能少,但是性能高)

属性:		类型

{
1.to 字符

	<Link to="/about">关于</Link>		

	
	// to为obj
<Link to={{
	pathname: '/courses',
	search: '?sort=name',
	hash: '#the-hash',
	state: { fromDashboard: true }
}}/>

如果传递是一个对象的话

pathname 是你要跳转的地址

search 是你地址后面? 需要拼接传递的数据

传递过去 props.location{ search:" ? goods_id = 1 "}

如果你要使用的话需要将 " ? goods_id = 1 " 转换为 { goods_id : 1 }

第三方库querystring 字符转化为对象

安装第三方库命令 npm i querystring

import querystring from 'querystring';


let str = 'name=swt&age=20'

console.log(querystring.parse(str)) //{name: "swt", age: "20"}  解析成js对象

let obj = {name: "swt", age: "20"}

console.log(qs.stringify(obj)) //name=swt&age=20
2.replace	布尔 			是否替换历史记录

}

5.Redirect 重定向 --replace (自带路由上下文)

属性: 类型

{
1.from 字符 来自
2.to 字符 || 对象 去向 将跳转 / 的路由跳转到 /home
3.push 布尔 是否添加历史记录
4.exact 函数 严格匹配
5.sensitive 布尔 区分大小写
}

6.Route 注册路由地址

属性:		类型

{
1.path 字符 || 数组 可以接受多个路由匹配一个组件
2.exact 布尔 exact代表当前路由path的路径采用精确匹配,一般path=”/"这个路由一般会加上exact
3.component 函数或者组件 在地址匹配的时候React的组件才会被渲染,route props也会一起被渲染
4.render 函数 可以在函数里执行相对的逻辑操作,但是需要返回一个组件 类似component
}

7.Prompt 后置守卫

react非路由跳转组件获取上下文

1.通过路由跳转

给最大的App组件添加路由,默认如果不加path 默认所有路由都会匹配到当前组件

App组件拿到了路由上下文,并且被Route套了起来

{
	import {BrowserRouter, Route} from 'react-router-dom
	
	ReactDom.render(
		<BrowserRouter>
			 <Route component={App}/>  
		</BrowserRouter>,
  	     	document.getElementById('root')}openImg

2.通过属性传递

通过属性传递的方法解决,默认将没有路由上下文的组件 传递自定义属性的方式传递数据

<ChildA history={this.props.history} match={this.props.match} location={this.props.location}/>

或者

<ChildA {...this.props}/>

3.通过withRouter包装

withRouter(App)方法默认接受组件,将没有上下文的组件传进去,

就可以把不是通过路由切换过来的组件中,将 history、location、match 三个对象传入props对象上

import {withRouter} from 'react-router-dom'

class App extends Component{}

export default withRouter(App)

`` 模板字符串是js语句如果在jsx中使用需要加上{ } =============>>>

路由传递数据

params 参数 props.match.params 

<Link to = "/home/123">

<Route path = "/home/:abc" component...>

this.props.match {abc = 123}
search 参数  props.location.search 

在地址后面拼接 <Link to = "/home/ ? id = 123 & age = 11">

<Route path = " /home component..."> 注册的路由地址不需要配置

this.props.location  数据 { ?id = 123 & age = 11 }

需要用到querystring库来转换数据

import qs from "querystring"

qs.parse( this.props.location.search ) 字符转对象

{ ?id = 123 & age = 11 } 转化为 { id : 123 , age : 11}

qs.stringify( obj )  对象转字符
state 参数 props.location.state 

		<Link to={{
  			pathname: '/courses',	跳转的地址
  			search: '?sort=name',
  			hash: '#the-hash',
  			state: { fromDashboard: true }	传入的state数据
		}}/>

就是通过Link 跳转 为对象形式的时候 在里面传入state 参数 search 参数

编程式路由跳转

replace跳转携带params参数

配置动态路由 在地址 / 的后面直接拼接数据

params参数

this.props.history.replace( `/home/${ id }` )

this.props.history.push( `/home/${ id }` )

search参数

注册路由的时候不需要配置,直接通过问好后面添加数据 通过插件来解析数据

this.props.history.replace( `/home? a = 123` )

this.props.history.push( `/home? a = 123` )

state参数

this.props.history.replace( `/home`, { id:11 } )

this.props.history.push( `/home`, { id:11 } )

路由的方法和属性

history:

go ()

goBack () 倒退

goForward ()前进

push ()

replace()

location:

pathname:""

search: ""

state:undefined

match:

params:{ }

path:"",

url:""	

withRouter( )

export default withRouter ( ) 接受一个参数: 一般组件

让一般属性拥有路由的属性

没有路由跳转的一般组件都不具有路由上下文

解决因为没有跳转,而没有路由上下文的问题

BrowserRouter 和 HashRouter的区别

底层原理:
BrowserRouter使用的是H5的history

HashRouter使用的是URL的哈希值

path的表现形式:

BrowserRouter 路径没有#

HashRouter路径上拼接#

刷新对state的影响

BrowserRouter 没有影响 state保存在history对象中

HashRouter 刷新会导致state参数的丢失

路由懒加载

import React, { lazy, Suspense } from "react"

引入lazy Suspense

lazy:默认接受一个函数 按需引入组件

Const Home = lazy( () => { import ("./Home") } )

注册路由的标签使用< Suspense/ > 组件包裹

< Suspense fallback = { <Loading/> }/ >
	<Route ...>
< /Suspense >

按需加载路由, 如果路由加载中就调用Loading 组件 可以设置loading效果

React中的遍历li并添加路由

 state = {
        navs:[{to:"Home",text:"按钮1"},{to:"Ddex",text:"按钮2"},{to:"Adex",text:"按钮3"}]
    }

this.state.navs.map(( item, index => {
	<li key = { index }>
		<Link to = `{ / ${ item.to } }`>{ item.text }</Link>
	</li>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React中,可以使用react-router-dom库来获取路由的path。通常情况下,可以使用useLocation钩子函数来获取当前路由的信息。useLocation会返回一个location对象,其中包含了pathname属性,该属性表示当前页面的路径信息。下面是一个示例代码: ``` import { useLocation } from "react-router-dom"; function MyComponent() { const location = useLocation(); const path = location.pathname; // 在这里可以使用path变量来获取当前路由的path return ( <div> {/* 其他组件代码 */} </div> ); } ``` 在上述代码中,我们使用了useLocation钩子函数来获取当前路由的信息,并将其存储在location变量中。然后,我们可以通过访问location.pathname属性来获取当前路由的path。 注意,使用useLocation钩子函数需要在项目中的路由容器组件内使用,例如在BrowserRouter或HashRouter组件内部。另外,确保你已经正确导入了useLocation函数和react-router-dom库。 希望这个回答能够帮到你!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [react——路由](https://blog.csdn.net/m0_55173487/article/details/128618909)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值