React管理系统整合Cesium避坑指南

devtools/2024/10/9 8:12:28/

花费了一周时间将React 升级到了最新版本18,同时整合Cesium三维模块到系统中,其中遇到了react 版本升级后模块删改,按照原来的引入方式无法使用的问题,以及Cesium 放入子路由一直404等问题

文章目录

    • 一、系统版本依赖
    • 二、系统预览
    • 三、问题搜集
      • 1、首先是Switch,Redirect
      • 2、hashHistory
      • 3、dom 挂载
      • 4、子页面嵌入
      • 5、子页面加载Cesium

一、系统版本依赖

  • react@18.3.1
  • redux@5.0.1
  • react-router-dom@6.25.1
  • webpack@5.64.4
  • cesium@1.119.0
  • three@0.167.0
  • cesium_dev_kit@1.0.91

二、系统预览

  • 登录
    登录

哔哩哔哩 更直观的介绍 >>>>
https://www.bilibili.com/video/BV1TEvfebERj/?share_source=copy_web&vd_source=fa1aa0302eb3667530ecc801e28d9687

  • 功能介绍
    系统预览

三、问题搜集

1、首先是Switch,Redirect

最后开始 记得路由模块是 react-router,后期改成了react-router-dom

然鹅老版本配置是这样玩的:

import {BrowserRouter as Router,Route,Redirect,Link,Switch,
} from 'react-router-dom'
	<Router><Switch><Route path="/login" component={Login}></Route><Route path="/" render={(props) => layout}></Route><Redirect exact from="/user" to="/user/index"></Redirect></Switch></Router>

而新版本RedirectSwitch 已从react-router-dom 移除,取而代之的是 RoutersNavigate

需要将其改成

import {BrowserRouter as Router,Route,Navigate,Link,Routers,
} from 'react-router-dom'
	<Router><Routers><Route path="/login" element={Login}></Route><Route path="/" render={(props) => layout}></Route><Navigate index element={<Navigate to="/user/index" replace /></Routers></Router>

不知道大家注意到没有,上面路由配置还有一个改动就是component 改成了element

2、hashHistory

这个原本也是在router里面的

import {Router, Route, hashHistory} from 'react-router-dom';
 <Router history={hashHistory}></Router>

新版本移除了hashHistory , 需要额外安装 history 模块

npm install --save-dev history

然后创建history

import { createHashHistory } from 'history';
const hashHistory = createHashHistory();

再是路由注入

<Router location={hashHistory.location} navigator={hashHistory}></Router>

3、dom 挂载

原来是直接 render

import ReactDom from 'react-dom'ReactDOM.render(routes, document.getElementById('root'));

现在改到了client 模块里面,并且需要createRoot先构建

import ReactDOM from 'react-dom/client';const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(routes);

4、子页面嵌入

原本使用的是props.children
如:

<div className="ant-layout-container">{this.props.children} </div>

而现在需要使用Outlet来实现子页面的嵌入

import {Outlet} from "react-router-dom"<div className="ant-layout-container"><Outlet/></div>

5、子页面加载Cesium

最后一个是用子页面去加载Cesium 三维的模块,一直提示404

异常截图

就这样,当初我一直认为是路由哪里配置的不对,就一直捣鼓路由配置

接连两天都没解决这个问题,后来直接在App.jsx里面加载Cesium 模块没问题

就这样才慢慢发现其实这个404 不是路由问题,而是子页面里面的http 获取失败!

于是增加了setupProxy.js进行代理才得以解决404的问题

module.exports = function (app) {app.use( '/reactCesium/tools/draw',createProxyMiddleware({target:originUrl,changeOrigin: true,pathRewrite: {'^/reactCesium/tools/draw': '', // 重写路径},}));
}

嗯嗯记得的大概就这些吧,从这次升级的总体感受来说,反正本人觉得react 项目每升级一次都会让人铭记于心的

不知道大家感觉如何?如有其他关于版本差异的可以留言评论,后期我把他加文字便于其它小伙伴避坑

最后呈上项目原地址

功能在线预览 https://benpaodehenji.com/reactCesium/
github https://github.com/dengxiaoning/react-cesium


http://www.ppmy.cn/devtools/91377.html

相关文章

回归预测|基于雪消融优化极端梯度提升树的数据回归预测Matlab程序SAO-XGBoost多特征输入单输出 含基础模型

回归预测|基于雪消融优化极端梯度提升树的数据回归预测Matlab程序SAO-XGBoost多特征输入单输出 含基础模型 文章目录 前言回归预测|基于雪消融优化极端梯度提升树的数据回归预测Matlab程序SAO-XGBoost多特征输入单输出 含基础模型 一、SAO-XGBoost模型二、实验结果三、核心代码…

2024年AWS云服务器选择哪个区域最好?

在选择2024年AWS云服务器区域时&#xff0c;您需要根据您的业务需求、目标用户群体的位置、数据合规性要求、延迟需求以及成本预算等因素综合考虑。以下是九河云针对不同需求的建议&#xff1a; 北美区域 优势&#xff1a;北美区域&#xff0c;尤其是弗吉尼亚北部&#xff0c…

模拟退火的

题目链接 体验乱调参数而看天意的奇特体验 #include<bits/stdc.h> using namespace std; typedef long long ll; typedef unsigned long long ull; typedef pair<ll,ll> pii; const int inf0x3f3f3f3f; const int N1e510; const int mod1e97; //#define int long…

我在高职教STM32——I2C通信入门(2)

大家好,我是老耿,高职青椒一枚,一直从事单片机、嵌入式、物联网等课程的教学。对于高职的学生层次,同行应该都懂的,老师在课堂上教学几乎是没什么成就感的。正是如此,才有了借助CSDN平台寻求认同感和成就感的想法。在这里,我准备陆续把自己花了很多心思设计的教学课件分…

ollama+openwebui 部署本地自定义模型

ollama https://github.com/ollama/ollama open-webui https://github.com/open-webui/open-webui 部署流程&#xff1a; 1&#xff0c;**open-webui docker一键安装** docker run -d -p 3000:8080 --gpusall -v ollama:/root/.ollama -v open-webui:/app/backend/data --nam…

前端面试——函数执行顺序练习

练习 例子一例子2例子3 例子一 这里有一个例子&#xff0c;涉及到函数嵌套调用、微任务和宏任务。 function secondary() {console.log(Inside secondary); }function primary() {console.log(Start primary);// 微任务&#xff1a;PromisePromise.resolve().then(function p…

Dell R750 R760 H755安装SuSE12SP5 并识别Intel E810 NIC

新的机器对老的版本的OS支持不是非常好&#xff0c;好在有一些方法是可以获得老的驱动&#xff0c;并可以进行安装的。 1 需要有H755阵列卡对应的驱动 这里可以在博科的网站上进行下载&#xff0c;里面是有相关的驱动 截一些图片 按e键进行操作 后续继续安装即可,安装 安装…

智能监控:超越传统阈值的监控

在当今的 IT 监控领域&#xff0c;智能化分析正逐渐成为企业应对复杂系统挑战的关键技术。随着企业业务的不断扩展和 IT 环境的日益复杂&#xff0c;传统的监控方法已经难以满足企业对实时、准确监控的需求。观测云通过引入高级的智能监控能力&#xff0c;帮助企业预测和识别潜…