react学习一篇就够了 (7)

把一个非路由管控的组件,模拟成为路由管控的组件

export default withRouter(connect()(组件)); 先把nav基于connect高阶一下,返回的是一个代理组件proxy, 把返回的代理组件受路由管控

受路由管控组件的一些特点:

只有当前页面的哈希地址和路由指定的地址匹配,才会把对应的组件渲染(with-router是没有地址匹配,都被模拟成为受路由管控的)

路由切换的原理,凡是匹配的路由,都会把对应的组件内容,重新添加到页面中,相反,不匹配的都会在页面中移出掉,下一次重新匹配上,组件需要重新渲染到页面中,每一次路由切换的时候(页面的哈希路由由地址改变),都会从一级路由开始重新校验一遍

react学习一篇就够了

所有受路由管控的组件,在组建的属性props上默认添加了三个属性

history

push 向池子中追加一条新的信息,达到切换到指定路由地址的目的

this.props.history.push('/plan')js中实现路由切换

go 跳转到指定的地址(传的是数字 0当前 -1上一个 -2上两个...)

go-back =>go(-1) 回退到上一个地址

go-forward =>go(1) 向前走一步

location 获取当前哈希路由渲染组件的一些信息

pathname: 当前哈希路由地址

search : 当前页面的问号传参值

state: 基于redirect/link/nav-link中的to,传递的是一个对象,对象中编写state,就可以再location.state中获取

match :获取当前路由匹配的一些结果

params: 如果当前路由匹配的是地址路径参数,则这里可以获取传递参数的值

Redirect

重定向3xx

to:string 要重定向的地址

to:object 要重定向的位置

<Redirect to={{ pathname: '/login', search: '?utm=your+face', state: { referrer: currentLocation } }} />

push 重定向会将新的位置推入历史记录

<Redirect push to="/somewhere/else" />

<Redirect from={'/custom'} to={'/custom/list'}/> 当请求的是/custom的时候,直接跳转到/custom/list的路由地址

qs

yarn add qs

问号传参

OA和ERP

OA:企业办公管理系统(偏向于有助于日常办公)

ERP: 企业战略资源管理系统(偏向于有管理思想)

钉钉

TAPD

今目标

纷享销客

CRM:客户管理系统

CMS:内容管理系统(内容分发平台)

react学习一篇就够了

IM:即时通信系统

redux中间件

redux-logger:能够在控制台清晰的展示当前redux操作的流程和信息(原有状态,派发信息,修改后的状态)

redux-thunk: 处理异步的dispatch派发

redux-promise: 在dispatch派发的时候支持promise操作

yarn add redux-logger redux-thunk redux-promise store/index.js ===== import {createStore, applyMiddleware} from 'redux';//applyMiddleware导入中间件 import reduxLogger from 'redux-logger'; import reduxThunk from 'redux-thunk'; import reduxPromise from 'redux-promise'; import reducer from './reducer'; let store = createStore(reducer, applyMiddleware(reduxLogger, reduxThunk, reduxPromise)); export default store; //=>PROMISE中间件的语法 create(payload) { return { type: TYPES.CUSTOM_CREATE, //=>传递给REDUCER的PAYLOAD需要等待PROMISE成功,把成功的结果传递过去 payload: new Promise(resolve => { setTimeout(() => { resolve(payload); }, 3000); }) } } create(payload) { //=>THUNK中间件的使用语法:在指定执行派发任务的时候,等待3000MS后在派发 return dispatch => { //=>DISPATCH都传递给我们了,我们想什么时候派发,自己搞定即可 setTimeout(() => { dispatch({ type: TYPES.CUSTOM_CREATE, payload }); }, 3000); }; }

路由问号传参案例

Ant Desion UI框架

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpfxfs.html