react---路由基本使用 + 路由基础属性(两种路由形式:component 、render) + 传参 + 嵌套 +组件分开合并

在这里插入图片描述

react 路由

npm i react-router-dom # 安装路由插件
Router  表示所有需要使用路由的部分都必须包含在此节点内部,一个项目只需要有一个此节点就好

此Router有两种常见的形式hash browser,
    hash路由,连接处有个#,不需要配置,没有兼容,可以直接使用;
    而浏览器历史记录路由需要在web服务器中做特殊配置,兼容性也不好,
    因此不建议使用浏览器历史记录路由。

Route   表示一个路由对象,需要属性 path component

  render方法,可以使用一个组件渲染路由内容,注意:此种方式渲染的组件是没有路由相关的属性信息传递的,需要使用widthRouter方法把路由属性带到组件内部

Link    生成一个a标签

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

App.js
传参、基本使用、
两种路由形式:component和render、
组件写一起,组件分开写–合并

import React from "react";
import { HashRouter as Router, Route, Link,/* withRouter */ } from "react-router-dom";
import { Button } from "antd";
import List from "./components/List";
import "./App.css";
import People from "./components/People";
/* 2️⃣2️⃣路由形式2的组件写在不同的页面用法 */
import About from "./pages/About";

const Home = (props) => {
  const { history } = props;
  return (
    <div>
      <h1>首页</h1>
      <Button
        onClick={() => {
          // 使用编程式跳转---传参
          history.push("/list");
        }}
      >
        列表页
      </Button>
      <Button
        onClick={() => {
          // 使用编程式跳转---传参
          history.push("/about");
        }}
      >
        关于我们
      </Button>
    </div>
  );
};

/*  1️⃣1️⃣路由形式2的组件写在同一个页面
const About = (props) => {
  console.log(props);
  return <h1>About us</h1>;
};

// 此处为高阶组件
//  其实就是js中的高阶函数
//  withRouter是一个函数,接收一个组件作为参数,为组件添加一些路由属性信息,返回一个新的组件(也就是把路由属性附加到组件里面)
const AboutPage = withRouter(About); */

function App() {
  return (
    <Router>
      <div className="App">
        <ul>
          <li>
            <Link exact to="/">首页</Link>
          </li>
          <li>
            <Link to="/list?t=cart">列表</Link>
          </li>
          <li>
            <Link to="/p">People</Link>
          </li>
        </ul>
        <hr />
        {/* Route是一个组件 */}
        <div className="container">
          {/* exact 表示完全匹配 */}
          {/* 如果不加exact的话 每个页面都会有/那么每个页面都会有Home页这个内容 */}
          {/* 路由形式1️⃣component会自带路由属性 */}
          <Route path="/" exact component={Home} />
          <Route path="/list" component={List} />
          <Route path="/p" component={People} />
          {/* 2️⃣路由的另一种形式:render方式渲染组件,没有直接使用component指定组件
              这时候在路由对应的组件中没有history和location等路由的属性信息(因为这是默这种形式默认情况下的,就不带这些信息,需要用withRouter)
          */}
          <Route path="/about" render={() => <About />} />
        </div>
      </div>
    </Router>
  );
}

export default App;

About.jsx

import React from "react";
import { withRouter } from "react-router-dom";

const About = (props) => {
  console.log(props);
  return <h1>有什么有什么要联系我们的吗,欢迎您哦</h1>;
};

export default withRouter(About);

List.jsx

import React from "react";
import { withRouter } from "react-router-dom";

function List(props) {
  console.log(props);
   // 路由组件中会包含
  //    history
  //    location
  //    match
  // 此处可以使用new URLSearchParams获取当前查询条件
  //  使用模块qs也能获取查询条件
  const params = new URLSearchParams(props.location.search);
  console.log(params.get("t"));
  return (
    <div>
      <h1>我是一个列表页</h1>
    </div>
  );
}

export default withRouter(List);

嵌套

import React from "react";
import { withRouter, Link, Route } from "react-router-dom";

const About = (props) => {
  console.log(props);
  return (
    <div>
      <h1>About us</h1>
      <Link to="/about/ygfc">【员工风采】</Link>
      <Link to="/about/gstd">【公司团队】</Link>
      <Link to="/about/qywh">【企业文化】</Link>
      <hr />
      {/* 没有用component是因为不想再定义一个,想偷懒举例,所以用的render */}
      <Route path="/about/ygfc" render={() => <h1>员工风采</h1>} />
      <Route path="/about/gstd" render={() => <h1>公司团队</h1>} />
      <Route path="/about/qywh" render={() => <h1>企业文化</h1>} />
    </div>
  );
};

export default withRouter(About);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值