当前位置: 首页 > news >正文

aspcms网站地图模板济南建网站多少钱

aspcms网站地图模板,济南建网站多少钱,如何做seo优化,实时热点新闻及评论React 基础巩固(四十一)——手动路由跳转、参数传递及路由配置 一、实现手动跳转路由 利用 useNavigate 封装一个 withRouter(hoc/with_router.js) import { useNavigate } from "react-router-dom"; // 封装一个高阶组件 function withRou…

React 基础巩固(四十一)——手动路由跳转、参数传递及路由配置

一、实现手动跳转路由

  1. 利用 useNavigate 封装一个 withRouter(hoc/with_router.js)
import { useNavigate } from "react-router-dom";
// 封装一个高阶组件
function withRouter(WrapperComponent) {return function (props) {const navigate = useNavigate();const router = { navigate };return <WrapperComponent {...props} router={router} />;};
}export default withRouter;
  1. 添加到hoc/index.js文件中
import withRouter from "./with_router";
export { withRouter };
  1. 利用withRouter,拦截Home组件,实现手动跳转路由
import React, { PureComponent } from "react";
import { Link, Outlet } from "react-router-dom";
import { withRouter } from "../hoc";export class Home extends PureComponent {navigateTo(path) {const { navigate } = this.props.router;navigate(path);}render() {return (<div><h1>Home</h1><div className="nav"><Link to="/home/recommend">推荐</Link><Link to="/home/ranking">排行榜</Link><button onClick={(e) => this.navigateTo("/home/songmenu")}>歌单</button></div>{/* 占位组件 */}<Outlet /></div>);}
}export default withRouter(Home);

二、路由参数传递

路由参数传递包括:1.动态路由传参;2.查询字符串传参

改造withRouter,通过useParams()useSearchParams()来接收两种参数传递:

import {useLocation,useNavigate,useParams,useSearchParams,
} from "react-router-dom";
// 封装一个高阶组件
function withRouter(WrapperComponent) {return function (props) {// 1.导航const navigate = useNavigate();// 2.动态路由参数const params = useParams();// 3.查询字符串的参数:/user?name=test&age=18const location = useLocation();const [searchParams] = useSearchParams();const query = Object.fromEntries(searchParams)console.log(query);const router = { navigate, params, location, query };return <WrapperComponent {...props} router={router} />;};
}export default withRouter;

在界面中,通过params来接收(Detail.js):

import React, { PureComponent } from "react";
import { withRouter } from "../hoc";export class Detail extends PureComponent {render() {const { router } = this.props;const { params } = router;return (<div><h2>Detail</h2><h2>id:{params.id}</h2></div>);}
}export default withRouter(Detail);

通过 query 来接收(User.jsx):

import React, { PureComponent } from "react";
import { withRouter } from "../hoc";export class User extends PureComponent {render() {const { router } = this.props;const { query } = router;return (<div><h1>用户:{query.name} - {query.age}</h1></div>);}
}export default withRouter(User);

三、路由配置文件

当前App.jsx文件中,包含Routes相关信息,过于臃肿,我们可以将Routes通过配置的形式进行引入。

构建router/index.js,将所有的路由配置在此处:

import Home from "../pages/Home";
import About from "../pages/About";
import Login from "../pages/Login";
import NotFound from "../pages/NotFound";
import HomeRecommend from "../pages/HomeRecommend";
import HomeRanking from "../pages/HomeRanking";
import Category from "../pages/Category";
import Order from "../pages/Order";
import HomeSangMenu from "../pages/HomeSangMenu";
import Detail from "../pages/Detail";
import User from "../pages/User";
import { Navigate } from "react-router-dom";const routes = [{path: "/",element: <Navigate to="/home" />,},{path: "/home",element: <Home />,children: [{path: "/home",element: <Navigate to="/home/recommend" />,},{path: "/home/recommend",element: <HomeRecommend />,},{path: "/home/ranking",element: <HomeRanking />,},{path: "/home/sangmenu",element: <HomeSangMenu />,},],},{path: "/about",element: <About />,},{path: "/login",element: <Login />,},{path: "/category",element: <Category />,},{path: "/order",element: <Order />,},{path: "/detail",element: <Detail />,},{path: "/user",element: <User />,},{path: "*",element: <NotFound />,},
];
export default routes;

改写App.jsx,通过useRoutes(routes)引入路由:

import React from "react";
import {Link,NavLink,useNavigate,useRoutes,
} from "react-router-dom";
import "./style.css";
// import Home from "./pages/Home";
// import About from "./pages/About";
// import Login from "./pages/Login";
// import NotFound from "./pages/NotFound";
// import HomeRecommend from "./pages/HomeRecommend";
// import HomeRanking from "./pages/HomeRanking";
// import Category from "./pages/Category";
// import Order from "./pages/Order";
// import HomeSangMenu from "./pages/HomeSangMenu";
// import Detail from "./pages/Detail";
// import User from "./pages/User";
import routes from "./router";export function App(props) {const navigate = useNavigate();function navigateTo(path) {console.log(path);navigate(path);}return (<div className="app"><div className="header"><span>header</span><div className="nav"><NavLink to="/home">首页</NavLink><NavLink to="/about">关于</NavLink><NavLink to="/login">登陆</NavLink><button onClick={(e) => navigateTo("/category")}>分类</button><span onClick={(e) => navigateTo("/order ")}>订单</span><Link to="/user?name=test&age=18">用户</Link></div><hr /></div><div className="content">{/* 映射关系: path => Component */}{/* <Routes><Route path="/" element={<Navigate to="/home" />} /><Route path="/home" element={<Home />}><Route path="/home" element={<Navigate to="/home/recommend" />} /><Route path="/home/recommend" element={<HomeRecommend />} /><Route path="/home/ranking" element={<HomeRanking />} /><Route path="/home/songmenu" element={<HomeSangMenu />} /></Route><Route path="/about" element={<About />} /><Route path="/login" element={<Login />} /><Route path="/category" element={<Category />} /><Route path="/order" element={<Order />} /><Route path="/detail/:id" element={<Detail />} /><Route path="/user" element={<User />} /><Route path="*" element={<NotFound />} /></Routes> */}{useRoutes(routes)}</div><div className="footer">Footer</div></div>);
}export default App;

查看运行效果,与之前保持一致:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AByH8LHr-1690721021332)(https://gitee.com/outmanm78/markdown-image/raw/master/img/202307302029353.png)]

虽然成功抽离了路由配置信息,但是目前的方式,会导致路由统一打包,没有分包处理。我们可以进行改造一下,针对部分配置进行分包处理,实现路由懒加载:

import React from "react";
import Home from "../pages/Home";
// import About from "../pages/About";
// import Login from "../pages/Login";
import NotFound from "../pages/NotFound";
import HomeRecommend from "../pages/HomeRecommend";
import HomeRanking from "../pages/HomeRanking";
import Category from "../pages/Category";
import Order from "../pages/Order";
import HomeSangMenu from "../pages/HomeSangMenu";
import Detail from "../pages/Detail";
import User from "../pages/User";
import { Navigate } from "react-router-dom";// 通过React.lazy实现About和Login界面的路由懒加载
const About = React.lazy(() => import("../pages/About"));
const Login = React.lazy(() => import("../pages/Login"));

在src/index.js中,用Suspense对App进行包裹,实现对分包加载的等待:

import React, { Suspense } from "react";
import ReactDOM from "react-dom/client";
import App from "./App";
import { HashRouter } from "react-router-dom";const root = ReactDOM.createRoot(document.getElementById("root"));
root.render(<React.StrictMode><HashRouter><Suspense fallback={<h3>Loading...</h3>}><App /></Suspense></HashRouter></React.StrictMode>
);

查看效果,与之前保持一致,懒加载实现成功:

image-20230730204327732

http://www.yayakq.cn/news/479755/

相关文章:

  • 网站描述怎么写比较好扒完网站代码之后怎么做模板
  • 四川省建设网站平台企业网络营销策略有哪些
  • 网站建设人员分工美轮美奂的网站建设
  • 汽车网站哪个好搜索引擎优化的策略主要有
  • 济南企业型网站做企业国际网站多少钱
  • 建设网站二级建造师如何解聘网站主题如何制作
  • 北京大兴网站建设公司哪家好建立网站需要钱吗
  • 谷歌网站地图提交网络营销的方法有哪些
  • 广东省建设教育协会网站做网站开发学什么内容
  • 百度站长平台h5网站汕头网站搜索引擎优化
  • 网站功能需求分析文档手机上怎么做自己卖菜的网站
  • 浙江网站建设抖音seo优化网站系统接口500异常
  • 外贸营销网站怎么建站网站建设属于硬件还是软件
  • 网站开发项目需求文档门户网站营销怎么做
  • 邵阳红网站企业做网站收费
  • 安顺建设工程造价管理网站广州做网站怎么样
  • 网站推荐你了解我意思吧免费制作手机app的软件
  • 怎么做百度网站免费的产品定制网站开发
  • 建设视频网站链接百度云盘国外互联网科技网站
  • qq免费注册网站谷歌关键词搜索排名
  • 做关于水果的网站公司做网站有用吗
  • 深圳网站设计技术微信小程序线上商城怎么做
  • 深圳市住房和建设局网站和市住宅租赁管理服务中心做外国网站买域名
  • 温州网站建设开发运营公众号需要多少钱
  • 电商网站开发哪家好搜狗收录网站
  • 华艺网站建设企业163邮箱登录
  • pc网站做app用divid做网站代码
  • 建立网站接受投注是什么意思建网站广州
  • 现在建网站可以赚钱吗网站开发一般包括
  • 源码快速建站wordpress 内置 函数