redux、react-route使用总结

redux

使用原理打如下图所示:在这里插入图片描述

action: 相当于圣旨,是个函数,返回对象,例如:{type:‘add’}
store:仓库,只用于存储
reducer:类似vuex里的mutation,根据圣旨(action)来执行,执行完更改仓库明细,仓库在通知页面发生变化,并且不支持异步操作

react comp:只能派发action,不能直接操作仓库,

使用:较繁琐
1、安装redux
2、在根目录下创建store.js,内容大致有

  1. 引入redux内的createStore函数,参数是一个reducer,const store = createStore(counteReducer)
  2. 传入store的参数reducer是一个函数,带有两个参数,state和action,action是个对象,内含有type属性,根据type执行相应的操作(可以使用switch语句进行判断),返回一个新的state
    3、在每个需要用到全局的地方都要引入store,然后通过点击等事件执行 store.deptch({type:‘add’}),这样子是更新了store,但是页面上的数据还不会更新,需要借助store的subscribe函数
    4、 在index.js中引入store,用store.subscibe(传入render的那一句),用以监听,当数据发生改变就更新页面

react-reduce

使用react-reduce插件会方便很多

  1. 在app.js中,从react-redux中引入Povide
    使用上下文传值的方式:<Provide store={store}>用到store的组件</Provide>

  2. 在用到的组件中,从 react-redux中引入connect,connect是高阶组件

    使用:connect(mapStateToProps,mapDispatchToProps )(组件名)

    或者使用装饰器的写法:@connect(mapStateToProps,mapDispatchToProps )
    组件必须要用class定义,而且要放在connect的下面,然后正常导出

    mapStateToProps = state => {num:state}

    mapDispatchToProps = {
    	add: ()=>{type:'add'},
    	minus: ()=>{type:'minus'},
    } 
    
  3. 之前只能使用dispatch派发对象{type:‘add’},现在可以在组件中直接解构出需要的state或dispatch,然后直接使用
    原:onClick =()=> {store.deptch({type:'add'})}
    现:onClick ={add}

redux-thunk

使用redux-thunk后,mapDispatchToProps 的返回值可以是一个异步函数,携带默认参数dispatch

	mapDispatchToProps = {
		add: ()=>(dispatch) => {
			// 处理异步事件
			// ......
			//完成后
			dispatch({type:'add'})
		}
	} 

在redux中可以解构出applyMiddleWare,是一个用于接收中间件的函数,有多个中间件则用逗号隔开,然后将applyMiddleWare(thunk)作为createStore的第二个参数传入

combineReducer

多个store时,用combineReducer

1、引入,从redux中结构出来combineReducer
2、使用,createStore不在只传一个reducer,而是传combineReducer({键:值})
例如:combineReducer({counter:counterReducer})
3、原: mapStateToProps = state => {num:state}
现:mapStateToProps = state => {num:state.counter}

react-router-dom

<BrowserRouter>
	<Route path="" component={}></Route>
</BrowserRouter>

Link:链接
exact:路由全匹配
Router:路由匹配容器
switch:从上至下选择之一匹配,最后一个可以是404页面的路由,即匹配不到

路由守卫:
包装一个组件,
比如登录的组件

function PrivateRoute({component:Comp,isLogin,...rest}) {
	 return (
	 	<Route {...rest} render={
	 		props => isLogin ? <Comp /> :
	 			<Redirect
	 				to={{pathname:'/login',redirect:props.location.pathname}}/>}
	 			/>        
	 )
}

路由组件获取参数
props含有三个参数
1、match 获取参数信息
2、history 导航指令
3、location 当前url信息
获取参数用props.match.params.参数
用props.history.goBack返回上一页

umi

与nuxt类似,可以快速开发
page存放于src目录下,用于存放页面,嵌套的页面用文件夹的方式,传参用$参数名的方式进行传参,_layout文件用于公共样式

例如:可以通过 umi g page users 创建一个user的页面,并且已经匹配好了路由

自定义路由:在根目录下创建config文件夹,内部创建config.js,此时不再使用默认的路由文件,而是使用自定义的路由文件

自定义裸游的路由守卫:

1、在要守卫的路由上加一个 Routes:["./routes/PraviteRoute.js"] //根据根目录,且后缀名不可改
PraviteRoute.js

import Redirect from "umi/redirect";

export default props => {
	if(拦截条件){
		return <Redirect to="/login" />
	}
	return (
		<div>
			{props.children}
		</div>
	)
}

dva

内部集成了redux-saga插件
要使用generator生产函数,call用于请求异步函数,put用于调用reducer
在这里插入图片描述
getGoods为异步获取数据,put用于更新数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用:react-router-dom是一个用于React应用程序的路由库。它提供了一种管理应用程序中不同页面之间导航的方式。react-router-dom有几个相关的模块,包括react-router-native、react-router-reduxreact-router-config等。其中,react-router-native是用于React Native应用程序的绑定,react-router-redux是与Redux结合使用的模块,而react-router-config则是一个用于静态路由配置的助手。 引用:在使用react-router-dom的v6版本时,可以通过使用useRoutes函数来绑定路由配置。在一个App组件中,可以导入routes文件,并在App组件中使用useRoutes函数将路由配置渲染到页面上。 引用:在v6版本中,可以选择使用BrowserRouter或HashRouter来包裹整个应用程序的组件。BrowserRouter和HashRouter的作用都是为了管理地址栏的URL,但BrowserRouter使用的是正常的URL路径,而HashRouter修改的是地址栏的hash值。另外,在v6版本中,可以使用<Routes>和<Route>来进行路由配置,其中<Routes>用于包含多个<Route>组件,每个<Route>对应一个页面。 所以,如果你想了解react-router-dom v6的更多内容,可以参考官方文档或查看相关示例代码。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [react-router:react-router 中文文档](https://download.csdn.net/download/weixin_42166261/18230223)[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_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [react-router-dom V6 中文文档教程总结](https://blog.csdn.net/xm1037782843/article/details/127454966)[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_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [React学习笔记_React Router 6](https://blog.csdn.net/qq_20470063/article/details/123361115)[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_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值