面试 - react路由组件 - 跳转原理 - 2种路由 - 3种传参方式

import React, { Component } from "react";
import { browserRouter, Link, Switch, Route, Redirect } from "react-router-dom";
import About from "./pages/About";
import Main from "./pages/Main"; //路由组件,放在pags文件

export default class App extends Component {
  render() {
    return (
      <div className="flex-row-center">
        <browserRouter>
          <div style={{ marginRight: 20 }}>
            {/* ----------------------传params参数------------------------- */}
            <Link to="/about/hguan/18">About</Link>

            {/* ----------------------传search参数------------------------- */}
            <Link to="/main/?name=hguan&age=18">Main</Link>

            {/* ----------------------传state参数-------------------------- */}
            <Link
              to={{ pathname: "/about", state: { name: "hguan", age: 18 } }}
            ></Link>
          </div>
          <div>
            <Switch>
              {/* ====================声明接收params参数================== */}
              <Route path="/about/:name/:age" component={About} />

              {/* ==================search参数无需声明接收================= */}
              {/* ================= state参数无需声明接收================== */}
              <Route path="/main" component={Main} />

              <Redirect to="/main" />
            </Switch>
          </div>
        </browserRouter>
      </div>
    );
  }
}
/**
 *  ”路由跳转“ 的工作原理:就是对history历史记录进行操作
 *     push模式     将路径压入history栈,留痕 ------- 认
 *                  (1).声明式导航:<Link to="/test" />
 *                  (2).编程式导航:this.props.history.push("/test");
 *
 *     replace模式  切换路由时替换路径,无痕
 *                  (1).声明式导航:<Link replace to="/test" />
 *                  (2).编程式导航:this.props.history.replace("/test");
 */

/**
 *  路由组件传参:
 
 *   方法一.  传递params参数:
 * 
 *      (1)传参:
 *                声明式导航:<Link to="/about/hguan/26">关于</Link>
 *                编程式导航: this.props.history.push("/about/hguan/26");
 *      (2)声明:<Route path="/about/:name/:age" component={About} />
 *      (3)组件接收: const {name,age} = this.props.match.params   格式为对象{name:hguan,age:18}
 *
 
 *   方法二: 传递search参数:
 * 
 *      (1)传参:
 *                声明式导航:<Link to="/about/?name=hguan&age=26" >关于</Link>
 *                编程式导航: this.props.history.push("/about/?name=hguan&age=26");
 *      (2)声明:(无需声明,正常注册即可) <Route path="/about" component={About} />
 *      (3)组件接收: const urlStr = this.props.location.search   格式为字符串‘?name=hguan&age=26’
 *                     const {name,age}=qs.parse(urlStr.slice(1));
 *
 *          >>> 补充:这种key=value&key=value的编码形式叫做urlencoded编码;
 *                import qs from "qureystring";(脚手架自带)
 *                 qs.stringify(对象)            //将对象转为urlencoded编码
 *                 qs.parse(urlencoded编码)      //将urlencoded编码转为对象
 *
 
 *   方法三: 传递state参数:
 * 
 *      (1)传参:
 *                声明式导航:<Link to={{ pathname: "/about", state: { name: "hguan", age: 26 } }}>关于</Link>
 *                编程式导航: this.props.history.push("/about",{ name: "hguan", age: 26 });
 *      (2)声明:(无需声明,正常注册即可) <Route path="/about" component={About} />
 *      (3)组件接收:  const {name,age} = this.props.location.state    格式为对象{name:hguan,age:26}
 */

相关文章

显卡天梯图2024最新版,显卡是电脑进行图形处理的重要设备,...
初始化电脑时出现问题怎么办,可以使用win系统的安装介质,连...
todesk远程开机怎么设置,两台电脑要在同一局域网内,然后需...
油猴谷歌插件怎么安装,可以通过谷歌应用商店进行安装,需要...
虚拟内存这个名词想必很多人都听说过,我们在使用电脑的时候...