React 路由 学习 记录

学习目标:

提示:React路由的基础

  • 一周掌握 React路由入门知识

学习内容:

提示:这里可以添加要学的内容

  1. 搭建 React 开发环境
  2. 掌握 React 基本语法
  3. 掌握 路由基本使用
  4. 掌握 嵌套路由的基本语法

学习时间:

  • 周一至周五晚上 7 点—晚上9点

学习产出:

提示:学习过程中的问题与解决方式

React 的环境搭建

		1.下载 [node.js 地址](https://nodejs.org/en)  跟着提示傻瓜是安装就可以

在这里插入图片描述
2. 下载完成之后 win+R 打开 输入 node -v 查看 版本号
在这里插入图片描述
3. 之后 npm install -g create-react-app 使用这个命令在全局装一下 create-react-app 只需要装一次就可以在这里插入图片描述
4. 上面跑完之后 create-react-app -V 查看一下版本号 记住是大V
在这里插入图片描述
5.创建一个React的项目create-react-app + 项目名称
 React的项目基础目录
6.这个是一个空项目需要自己去搭建 这里就只配路由 npm install react-router-dom 下载路由
在这里插入图片描述

NavLink 的使用方法

	1. import { NavLink, Route } from "react-router-dom";

需要从 《react-router-dom》 结构出 NavLink

     <NavLink
      activeClassName="Link_cliass_xuanzhong" // 选中高亮 可自己设置 class 类名
      path="About" // 路径
      to="/about" // 去哪里
      className="Link_cliass "
    >
    2. NavLink 标签体 的内容是 一个是特殊的 属性 children
    3.可以通过 this.props.children 可以获取到 标签体的内容

Switch 标签的 使用

		  路由的匹配 只要有一个匹配上就不往下找了
		
		    使用条件 , 注册路由一个以上的时候 使用
		
		    1. 在注册路由的时候
		        <Switch>
		            <Route path="/dome" component={dome}></Route>
		            <Route path="/Home" component={Home}></Route>
		        </Switch>
		
		    2. 通常情况下,path与component 时一 一 对应的关系
		
		    3. Switch 可以提高路由匹配效率 ( 单一匹配 ) 类似 数组方法中的 some

样式丢失的问题 解决 问题

	 {
    1.public/index.html 中 引入 样式时 不写 (./) , 写 ( /  常用 )
    2.public/index.html 中 引入 样式时 不写 (./) , 写 (%PUBLIC_URL% 常用 ) 此方法只能 在react 中使用
    3. 使用 HashRouter  路由模式
}

 <link  href="%PUBLIC_URL%/logo192.png" />

     1.在路径前加一个 %PUBLIC_URL%/ 前缀

<link  href="./css/xxx.csss" />

     2. 去掉 href="./css/xxx.csss" 的.

     3. 使用 HashRouter  路由模式

路由的严格匹配 与 模糊匹配

1. 路由默認使用的是模糊匹配 ( 【輸入的路徑】 必須包含 【匹配的路徑】 且順序一樣)

2. 开启严格模式 语法 <Route exact path="/homes" component={home} /> 在router 标签上加一个 exact的属性 true 是开启 false 是关闭

3. 提示 :严格模式不要随便开启,需要在开启有些时候开启会导致无法继续匹配二级路由

二级路由的使用 【嵌套路由的使用】

	  /**
 * 这个写法有几个问题
 * 1. react 在进行路由模糊匹配的是 ( 【輸入的路徑】 必須包含 【匹配的路徑】 且順序一樣)
 * 2. 如果找不到当前匹配的路由 会通过 redirect 进行路由的重定向,前往指定的页面
 */
 1. 注册子路由时要写上父路由的 path 值
 2. 路由的匹配是按照注册路由的顺序进行的

路由的传参方式

 Route params 传参
           1. 传参语法 拼接在路径上   <Link to={`/xxx/xxx/xx/${xxx.id}/${xxx.name}`} key={xxx.id}>{xxx.name}</Link>
           2. 注册路由语法 : <Route path="/home/List/touterLsit/:id/:name" component={TouterLsit}></Route>
           3. 参数接收 this.props.math.params 使用结构赋值 可以取到传过来的数据
 <ul>
           {ArrayLSit.map((ArrayLSitObject) => {
            return (
              <Link
                className="Link"
                to={`/home/List/touterLsit/${ArrayLSitObject.id}/${ArrayLSitObject.name}`}
                key={ArrayLSitObject.id}
              >
                {ArrayLSitObject.name}
              </Link>
            );
          })}
          </ul>
        {/**
         * params 传参
         * 路由的祖册
         * *  */}
         <Route  path="/home/List/touterLsit/:id/:name" component={TouterLsit} ></Route>
Route search  传参
   1. 传参语法 拼接在路径上
      <Link to={`/home/List/touterLsit?id=${xxxx.id}&name=${xxx.name}`} key={xxx.id}>{xxx.name}</Link>
   2. 注册路由语法 : 注册路由(无需声明,正常注册即可)
    <Route path="/home/List/touterLsit" component={TouterLsit}></Route>
   3. 参数接收 this.props.location.search 使用结构赋值 可以取到传过来的数据  
   4. 备注: 获取到的search是urlencoded编码字符串,需要借助querystring解析
  	        借助 (querystring 库) 下载 npm install querystring  import ps from "querystring";
   	        const { id, name } = ps.parse(this.props.location.search.slice(1)) || {};
   <ul>
     return (
       <Link
         className="Link"
         to={`/home/List/touterLsit?id=${ArrayLSitObject.id}&name=${ArrayLSitObject.name}`}
         key={ArrayLSitObject.id}
       >
         {ArrayLSitObject.name}
       </Link>
     );
   })}
      </ul>
      // 路由 注册
        <Route path="/home/List/touterLsit" component={Secth}></Route> */}
Router  state 传参
  1. 传参语法 拼接在路径上
    <Link to={
   
   {
     pathname: "/home/List/SecthKist",
     state: { id: ArrayLSitObject.id, name: ArrayLSitObject.name },}}
     key={xxx.id}>{xxx.name}
     </Link>
  2. 注册路由语法 : 注册路由(无需声明,正常注册即可) 
  3. <Route path="/home/List/touterLsit" component={TouterLsit}></Route>
  4. 参数接收 this.props.location.state 使用结构赋值 可以取到传过来的数据
  5. 相对于 前两个 安全性高 传过去的参数不会在地址栏中展示
     <ul>
  	 {ArrayLSit.map((ArrayLSitObject) => {
            return (
              <Link
                className="Link"
                to={
   
   {
                  pathname: "/home/List/SecthKist",
                  state: { id: ArrayLSitObject.id, name: ArrayLSitObject.name },
                }}
                key={ArrayLSitObject.id}
              >
                {ArrayLSitObject.name}
              </Link>
            );
          })}
        </ul>
          // 路由 注册
         <Route path="/home/List/SecthKist" component={StateList}></Route>
        ```

猜你喜欢

转载自blog.csdn.net/id_EquinoxFlower/article/details/130826664
今日推荐