首页 > 其他分享 >React学习路上的绊脚石Router

React学习路上的绊脚石Router

时间:2022-12-06 10:33:57浏览次数:40  
标签:const detail React router Router 绊脚石 id 路由 history

Router

  • react-router:核心库
  • react-router-dom:路由的软件包
  • react-router-nattive:用于开发RN应用的绑定

React-router-dom

  • HashRouter:http://xxx.com/#/about
  • BrowserRouter:使用H5的历史API来跟踪React应用的路由历史记录,形如http://xxx.com/about
  • Routes:Switch组件的升级版,包括相对路由和链接、自动路由排名、嵌套路由和布局等功能。
  • Route:负责渲染React组件的UI。有一个path属性和compoent属性
  • Link组件:
  • useParams:

params传参

优点:刷新页面,参数不丢失

缺点:

  • 1.只能传字符串,传值过多url会变得很长

    1. 参数必须在路由上配置
路由配置  
  { path: '/detail/:id/:name', component: Detail }

路由跳转和获取路由参数
import { useHistory,useParams } from 'react-router-dom';
const history = useHistory();
// 跳转路由   地址栏:/detail/2/zora
history.push('/detail/2/zora')
// 获取路由参数
const params = useParams()  
console.log(params) // {id: "2",name:"zora"}

Search传参

优点:刷新页面,参数不丢失

缺点:只能传字符串,传值过多url会变得很长,获取参数需要自定义hooks

路由配置  
 { path: '/detail/:id/:name', component: Detail }

路由跳转和获取路由参数	
import { useHistory } from 'react-router-dom';
const history = useHistory();
// 路由跳转  地址栏:/detail?id=2
history.push('/detail?id=2')  
// 或者
history.push({pathname:'/detail',search:'?id=2'})

/**
* 自定义hooks用于获取路由参数
* IE11及以下浏览器 不支持浏览器内置的URLSearchParams API
**/
function useQuery() {
  return new URLSearchParams(useLocation().search);
}
const query = useQuery()
const id = query.get('id') //2

/**
    自定义hooks
*/
import { useLocation } from 'react-router-dom';
import qs from 'query-string';

export function useQuery<T = any>(): T {
  const { search } = useLocation();
  return (qs.parse(search) as unknown) as T;
}
const query = useQuery<IRouteQuery>();
const {id} = query

State传参

优点:可以传对象

缺点: <HashRouter>刷新页面,参数丢失

路由配置 
  { path: '/detail', component: Detail }
	
路由跳转与获取路由参数
import { useHistory,useLocation } from 'react-router-dom';
const history = useHistory();
const item = {id:1,name:"zora"}
// 路由跳转
history.push(`/user/role/detail`, { id: item });
// 参数获取
const {state} = useLocation()
console.log(state)  // {id:1,name:"zora"}

标签:const,detail,React,router,Router,绊脚石,id,路由,history
From: https://www.cnblogs.com/kevin2022/p/16954496.html

相关文章

  • React Native基础与入门(一)--搭建开发环境
    什么是ReactNative?ReactNative是Facebook开源的一套用于开发移动端跨平台App的技术框架,其代码托管在GitHub上,目前已有一千多名参与者向它贡献代码。有兴趣的可以去查看源......
  • React团队开发-样式冲突
    Cssmodule在React多人开发中css中的类肯定会发生冲突如果每个页面的样式文件加上.module(文件名.module.scss)那么就会避免冲突(原理是将模块的类和id后面会随机生成一......
  • ReactRouter-路由拦截
    路由拦截应用场景:鉴权,当用户进入到需要授权的组件时,这时候进行拦截,判断用户是否授权,如果授权则放行,正常跳转,如果非授权则重定向授权页面。举个栗子importReactfrom......
  • React反向代理-跨域
    反向代理目的:解决跨域问题在src目录下新建一个setupProxy.jsconst{createProxyMiddleware}=require('http-proxy-middleware');module.exports=function(......
  • ReactRouter-路由模式
    路由模式BrowserRouter与HashRouterBrowserRouter没有#的路径HashRouter有#路径举个栗子importReactfrom'react'import{BrowserRouter,HashRouter,Red......
  • ReactRouter-参数传递与获取参数
    参数传递与获取参数1.动态路由传参*前提配置路由,留好占位//1.配置占位<HashRouter><Switch><Routepath="/xxx/:id"></Route>//留好占位</Switch><......
  • ReactNative新手入门,常见BUG
    cannotaddachildthatdoesn’thaveaYogaNode…布局文件编写错误,可能是布局文件中注视导致的.cannotfindvariableReact需要导入React.importReact,{Compone......
  • React native View 事件拦截与处理
    ReactNative事件处理流程在事件处理中,每个事件只能由一个组件处理,如组件C处理了事件,那么AB就不会处理这个事件了示例:如果发送一个触摸或移动事件,执行流程如下1.询问谁......
  • react-native 导航组件react-navigation详解
    react-native导航组件react-navigation详解Lyan_2ab3关注0.2622018.08.1318:08:47字数716阅读2,285继续上篇文章,还是先看下上篇文章react-navigation的官......
  • 2018,React Native第三方组件库汇总
    2018,ReactNative第三方组件库汇总老实人工程师​关注他 10人赞同了该文章移动跨平台框架ReactNative经过4年的发展,其生态已经变得异常丰富,在......