ant design proV1.0的采坑之旅 (动态创建菜单、访问mock数据、富文本编辑器)

2023-10-27

       最近公司做一个后台管理系统,犹豫半天还是想用ant design,后来发现他们有现成的脚手架 ant design pro ( github地址 ),果断拉代码下来运行起来。

一:ant design pro 项目目录结构和流程

整体目录大概长这个样子 

src里面是这样子

重要的就是mock文件和src文件咯,mock文件里面主要是用来本地构建请求返回的假数据(不是从服务器返回的数据),src则是存放整个项目相关的文件,接下来就重点讲解一下。

common:只有menu.js和router.js 前者是定义的菜单列表,这是因为ant design pro项目是写死的菜单列表 后面会讲如何动态构建菜单。后者是定义的整个项目的路由列表(也就是你访问每一个页面的路径都需要提前在这里定义好。)。

component:封装的一些基础UI组件(小零件)
layouts : ant design pro项目一些公共的组件比如:头部、尾部、构建菜单这些

routes:UI 组件(也就是每个路由对应的页面组件文件)
models:容器组件(用于组件的数据存储,接收请求返回的数据等)

services:请求服务器的接口列表、用于与后台交互、发送请求等

utils:封装的一些工具

index.js :整个项目的入口 有使用dva(小女子还没研究过,后面会深入研究。)

router.js:整个项目的路由入口 会有权限判断 (自己把utils文件下面几个文件的代码好好读一遍就能知道个大概了)

那么我们就可以好好捋一捋整个流程了

1、首先你要访问用户列表,那你就必须先去common文件夹下的router.js文件里面定义

也就是将‘/userManage/userlist’这个路由指向routes文件夹下的User/list页面。而其中dynamicWrapper方法则是将该页面与models文件夹下的user、login关联。只有关联后,页面才能访问models的数据。(我自己尝试后得知其他页面关联了的models也能访问。也就是路由A关联了user 路由B关联device 那么A页面也是能访问device的,B页面是能访问user的,但是如果都没关联customer,那A、B都是没法访问customer的,搞不懂为何这么设计!!)

2、接下来就应该根据定义的路由去构建菜单。

可以看出是由父节点菜单path+子节点菜单path组合而成

3、点击菜单的时候是不是就跳转到了‘../routes/User/list’页面呢?

进入页面的时候 是不是就应该请求列表数据?前面已经数过了 routes里面是纯UI组件,只负责页面展示,那么要展示的数据以及要提交给服务器的数据都必须向models去请求,或者提交给models去处理。两者要交互必须先connect起来。这样在UI组件就可以通过this.props拿到models的数据。

@connect(({ user, loading }) => ({

     user,

    loading: loading.models.system,

}))

第一个user表示的是user这个model,也就是当前页面要访问那几个models都必须这么先关联起来。loading是来自dva,可以监听models的状态。然后在页面就可以开始请求。

componentDidMount() {

     this.props.dispatch({     //dispatch相当于触发一个action

        type: 'user/userListfetch',//  models文件夹下user文件里面effects下面的*userListfetch方法

       payload: data    //  提交的参数

      });

}

 

3、然后我们再跟踪到models文件夹下的user文件。

    

namespace:表示改models的名称,

state:表示这个models下存储的数据,

effects:主要接收UI组件发送过来的action,

reducers:数据处理,存储到state.

 

*fetch(_, { call, put }) {

        const response = yield call(queryUsers); // 请求services文件夹

       yield put({   // 请求成功后 执行 reducers里面的save方法

            type: 'save',

            payload: response,

      });

},

 

save(state, action) {

    return {

         ...state,

       list: action.payload, // 把请求的结果放到state的list里面

      };

},

这样 在routes/user/list里面打印 this.props就一定是这样的结构

{

    user:{  // user对应的就是namespace

        list:[....] ,// ....表示请求拿到的值

       currentUser: {...},

       menuData: [....],

   }

  ........// 还有其他属性 来自dva或者ant design pro自己封装的东西 比如form、loading、routerData等等

}

4、继续跟踪到services文件夹下

就是向服务器进行请求。

---------------------------------------------自此 整个流程结束---------------------------------------------------------

二、Ant Design Pro使用技巧之mock数据地址改为服务器地址

第一步:package.json里面加一行

              "start": "cross-env ESLINT=none roadhog dev",

              "start:no-proxy": "cross-env NO_PROXY=true ESLINT=none roadhog dev",  // 表示配置代理服务器的启动方式

第二步:.roadhogrc.mock.js文件         

               // 是否禁用代理

              const noProxy = process.env.NO_PROXY === 'true';

              // 将所有以/api/开头的GETPOST请求全部直接转发至‘你的服务器地址’  

              export default noProxy ? { 'GET /api/*': '你的服务器地址','POST /api/*': '你的服务器地址' } : delay(proxy, 1000); 

第三步、启动

             npm start : 不适用代理服务器 请求mock数据

            npm run -r start:no-proxy :使用代理服务器 请求服务器数据

三、动态创建菜单

       https://www.jianshu.com/p/50c0047e2448 这篇别人的文章里面已经讲的很清楚了,直接下载github上的代码即可。

四、富文本编辑器

      因为项目所需的富文本编辑器比较简单,纠结了很久选择了react-draft-wysiwyg(支持把编辑器内容转化成html、json等格式,也支持将html、json等格式的数据转化成文本内容。)使用方法也很简单,跟着官网的几个demo走就可以了。

 

五:ant design pro 路由详解

 

暂时就这么多,以上全都是个人见解,有错误的地方希望大家指正,谢谢!!!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ant design proV1.0的采坑之旅 (动态创建菜单、访问mock数据、富文本编辑器) 的相关文章

  • css in js开发利器 - styled-components(样式组件)

    styled components 是一个常见的 css in js 类库 和所有同类型的类库一样 通过 js 赋能解决了原生 css 所不具备的能力 比如变量 循环 函数等 注意 有时候 React 版本和 styled componen
  • 在react项目中,使用craco插件进行mobx配置解决方案

    在使用react项目中 不可避免的要使用蚂蚁金服出品的ant desgin前端UI组件 ant desgin推荐使用 craco 一个对 create react app 进行自定义配置的社区解决方案 对 create react app
  • react的条件渲染(或者组件渲染)五种方式 --开发基础总结

    1 使用if的方式判断是否渲染某个组件 function UserGreeting props return h1 Welcome back h1 function GuestGreeting props return h1 Please
  • 对 React Hook的闭包陷阱的理解,有哪些解决方案?

    hooks中 奇怪 其实符合逻辑 的 闭包陷阱 的场景 同时 在许多 react hooks 的文章里 也能看到 useRef 的身影 那么为什么使用 useRef 又能摆脱 这个 闭包陷阱 搞清楚这些问题 将能较大的提升对 react h
  • 如何在 Ubuntu 20.04 上使用 React 前端设置 Ruby on Rails v7 项目

    作者选择了电子前沿基金会接受捐赠作为为捐款而写程序 介绍 红宝石 on Rails是一个流行的服务器端 Web 应用程序框架 它为当今网络上存在的许多流行应用程序提供支持 例如GitHub Basecamp 声云 Airbnb and Tw
  • styled-components 的用法

    用于给标签或组件添加样式 给标签或组件添加样式 import styled from styled components styled button 给button标签添加样式 const Button styled button back
  • 配置使用Eslint的时候 版本错误 "eslint": "5.6.0" a different version of eslint was detected higher up in the tr

    1 如果你也遇到下面的问题 你可以 按照命令行提示的那样 下面这四步完成的一般就可以了 但是不排除你在运行的时候忘记下载某些依赖 1 删除 package lock json 不是package json 你可以选择 yarn lock 或
  • Ant Design Pro 从零到一教程

    说在最前面的话 可是能全网唯一适合小白的antd教程 因为我找了接近一个周的教程 无论是视频 博客等等都没有比较完整的教程 所以才说这可能是唯一全网适合小白教程 文章末有相关学习链接 适用人群 喜欢看文字或者代码学习的人 学习的人掌握基本的
  • 组件间样式覆盖问题--CSS Modules

    1 组件间样式覆盖问题 问题 CityList 组件的样式 会影响 Map 组件的样式 原因 在配置路由时 CityList 和 Map 组件都被导入到项目中 那么组件的样式也就被导入到项目中了 如果组件之间样式名称相同 那么一个组件中的样
  • 一文揭秘饿了么跨端技术的演进、实践与落地

    本文会先带领大家一起简单回顾下跨端技术背景与演进历程与在这一波儿接着一波儿的跨端浪潮中的饿了么跨端现状 以及在这个背景下 相较于业界基于 React Vue 研发习惯出发的各种跨端方案 饿了么为什么会选择走另外一条路 这个过程中我们的一些思
  • 三、react中类组件和函数组件

    简介 本篇我们只要介绍react中类组件与函数组件两种组件的写法 两者的优缺点 同时对在我们的项目开发中该使用类组件还是函数组件进行思考分析 废话不多说进入正题 类组件 设计思路 类组件时面向对象编程的思想 在其中我们去设计类组件时使用st
  • 三分钟实现一个react-router-dom5.0的路由拦截(导航守卫)

    不同于vue 通过在路由里设置meta元字符实现路由拦截 在使用 Vue 框架提供了路由守卫功能 用来在进入某个路有前进行一些校验工作 如果校验失败 就跳转到 404 或者登陆页面 比如 Vue 中的 beforeEnter 函数 rout
  • react 上传文件(多选)功能入的坑

    1 这里报错是因为onChange的this指向不对 解决方法在constructor中写 this onChange this onChange bind this 或者在绑定事件的时候写 onChange this onChange b
  • React核心概念:状态提升

    上一节 表单 下一节 组合vs继承 React核心概念 状态提升 引言 添加第二个输入框 编写转换函数 状态提升 经验总结 引言 很多情况下我们使用的多个组件需要对同一个数据做出对应的反应 在这里我们推荐把这个共享的状态提升到距离这些组件最
  • React实现关键字高亮

    先看效果 实现很简单通过以下这个函数 highLight text keyword gt return text split keyword flatMap str gt span keyword span str slice 1 展示某段
  • umi 后台管理demo

    umi 后台管理demo umi react ts dva antd egg 有待优化 简单的前后端管理demo 接口提供增删查改 前端也有相应功能 github代码 https github com huiBuiling ql admin
  • ant design pro 代码学习(七) ----- 组件封装(登录模块)

    以登录模块为例 对ant design pro的组件封装进行相关分析 登录模块包含基础组件的封装 组件按模块划分 同类组件通过配置文件生成 跨层级组件直接数据通信等 相对来说还是具有一定的代表性 1 登录模块流程图 首先 全局了解一下登录模
  • react之封装有无Token(路由权限控制)的高阶组件

    TOC 前景 有些路由页面内的内容信息比较敏感 如果用户没有经过登录获取到有效Token 是没有权限跳转的 根据Token的有 无控制当前路由是否可以跳转就是路由的权限控制 技术方案 实现步骤 1 在 components 目录中 创建 A
  • 如何提高React组件的渲染效率的?在React中如何避免不必要的render?

    面试官 说说你是如何提高组件的渲染效率的 在React中如何避免不必要的render 一 是什么 react 基于虚拟 DOM 和高效 Diff 算法的完美配合 实现了对 DOM 最小粒度的更新 大多数情况下 React 对 DOM 的渲染
  • React安装依赖 node_modules中有下载依赖项但package.json文件中没有依赖

    React安装依赖 node modules中有下载依赖项但package json文件中没有依赖 直接在下载依赖项后 加 S 就可以解决 随机 id 生成器 uuid nanoid npm install nanoid S S save

随机推荐

  • BES提示音

    基于BES2500提示音的日志 11656 I NONE L M 13 threadpredict awaken label 1 11656 I NONE L M 13 app voice report handler 11656 I NO
  • Stable Diffuse 之 安装文件夹、以及操作界面 UI 、Prompt相关说明

    Stable Diffuse 之 安装文件夹 以及操作界面 UI Prompt相关说明 目录 Stable Diffuse 之 安装文件夹 以及操作界面 UI Prompt相关说明 一 简单介绍 二 安装文件相关说明 三 界面的简单说明 四
  • 微博评论内容的Chatgpt 话题聚焦和情感分析 情感分析&LDA主题&可视化&多元线性回归

    为了分析热点话题背后演化的逻辑 本项目选取了掀起大范围讨论的OpenAI发布的语言训练模型 ChatGPT 作为研究对象 通过对微博 豆瓣 知乎等社交平台进行考察分析 微博以活跃用户多 讨论热度高 公众关注度广等特点成为了本小组的第一首选
  • Makefile中echo和@echo的区别

    echo 会在shell中显示echo这条命令和这条命令的输出结果 echo 不会在shell中显示echo这条命令 但是会显示命令的输出结果 例如 echo test echo hello world echo test with add
  • 网络结构(1)ResNeXt介绍及cardinality介绍

    写这篇文章是因为最近在阅读论文的过程中 接触到了 cardinality 这个概念 出自2017年CVPR何凯明大神组的论文Aggregated Residual Transformations for Deep Neural Networ
  • 例题:加权合并与路径压缩

    题目 使用加权合并规则与路径压缩 对下列从0到15之间的数的等价对进行归并 并给出所得到的树的父指针表示法的数组表示 在初始情况下 集合中的每个元素分别在独立的等价类中 当两棵待归并的树的规模同样大时 使结点值较大的根结点作为值较小的根结点
  • 从redis为什么单线程还那么快到epoll的设计原理

    文章目录 redis为什么快 上下文切换 为什么采用单线程 redis的I O多路复用 epoll与select poll区别 select poll的几大缺点 用户态拷贝到内核态 epoll IO多路复用模型实现机制 epoll 优势详解
  • Redis-密钥登录ssh,免密码

    1 在kali上生成密钥 命令 ssh keygen t rsa 因为我这里有了 所以y选择了覆盖 如果是想无密码登录的话 则直接enter跳过 2 因为我这里config set dir root ssh dir有问题 所以我直接就把生成
  • 结构化开发方法--系统分析及设计概述

    说在前面 本系列文章专注于软考备考复习内容梳理 文章内容是对教材中知识点和考点的提炼 备考过程中可以有针对的进行复习 减少阅读量 有的放矢 导航目录 一 系统分析概述 二 系统设计的基本原理 三 系统总体结构设计 四 系统文档信息 一 系统
  • 【避坑指“难”】自定义AntV G2 Chart柱状图悬浮框信息

    实现效果如下 官方配置如下 import Chart from antv g2 const data time 16 Q1 type 移动游戏 value 0 time 16 Q1 type 移动购物 value 17 8 time 16
  • 不同编程语言语言的适用场景

    1 如何通俗地解释 C C C Java JavaScript HTML Python的用处 2 二十五岁零基础转行做软件测试怎么样 3 软件测试中的自动化测试一般要会什么编程语言 4 Which Programming Language
  • Linux 定时器设置

    crontab l 查看定时器任务 crontab e 编辑 定时器任务 sbin service crond start 启动服务 sbin service crond stop 关闭服务 sbin service crond resta
  • 【CUDA】第一个CUDA程序-addVector

    本文主要通过对两个浮点数组中的数据进行相加 并将其结果放入第三个数组中 其算法分别在CPU GPU上分别执行 并比较了所需时间 强烈感受到GPU的并行计算能力 这里 每个数组的元素大小为30000000个 一 实现代码 include
  • 模拟信号_模拟信号与模拟电路

    信号 用来携带信息的物理量 电信号 随着时间变化的电压或电流 在数学上 我们可以通过函数来表达这种变化情况 因此我们可以画出波形 电子电路中的信号分类 数字信号和模拟信号 模拟信号的特点 连续性 无论是在时间上还是在数值上 大多数的物理量均
  • Java中常见的异常类型是哪两种?他们有什么区别?

    Java中有两种异常 受检查的异常 checked 和不受检查的异常 unchecked 不受检查的异常不需要在方法或者是构造函数上声明 就算是方法或者是构造函数可能会抛出这样的异常 并且不受检查的异常可以传播到方法或者构造函数的外面 相反
  • 头条面经

    先来波面经 等这段时间秋招有空闲了再来好好总结 首先第一个 手写堆排快排 问题是求前k个大的数 或者第k大的数 第二个 intent的作用 为什么采用intent去连接四大组件 因为在各大组件将要回收的时候 可以将其保留 可以参考hongy
  • vue el-element中el-select选中值,数据已经改变但选择框中不显示值,需要其他输入框输入值才显示这个选择框才会显示刚才选中的值

    项目场景
  • 24 KVM管理虚拟机-配置VNC-TLS登录

    文章目录 24 KVM管理虚拟机 配置VNC TLS登录 24 1 概述 24 2 操作步骤 24 KVM管理虚拟机 配置VNC TLS登录 24 1 概述 VNC服务端和客户端默认采用明文方式进行数据传输 因此通信内容可能被第三方截获 为
  • 刷脸支付既方便快捷又新颖酷炫

    刷脸支付正是因为市场火热 支付行业的宏观监管日趋严格 新兴的人工智能技术不断被应用到支付场景中 指纹支付 声纹支付到刷脸支付 新技术的蔓延总是能出乎我们的意料 迅速地渗透进生活的方方面面 移动支付未来路在何方 支付行业一直是红海市场 而随着
  • ant design proV1.0的采坑之旅 (动态创建菜单、访问mock数据、富文本编辑器)

    最近公司做一个后台管理系统 犹豫半天还是想用ant design 后来发现他们有现成的脚手架 ant design pro github地址 果断拉代码下来运行起来 一 ant design pro 项目目录结构和流程 整体目录大概长这个样