「前端技巧总结」多个页面的操作聚合到某个页面的实现方案

简介: 用技术实现梦想,用梦想打开前端技术之门。分享我在日常开发中总结的前端技巧,今天是多个页面的操作聚合到某个页面的实现方案。

一、前言

刚接到这个需求的时候我有点不想写,因为要把所有的页面全都改一遍,且要保证不出现问题,功能不难,但是工作量有点大。我小小的纠结了一下就着手去做了,因为我发现,一旦改好,会有助于后面的业务开发。

我们的这个业务是工作流性质的,整个流程一共十个左右的节点,每个节点会有一个单独的页面,然后不同节点页面的操作有相同和不同的操作。新需要是要做一个待办页面,这个页面包含所有的节点,并且需要聚合所有的操作。

这个设计思路挺简单的,按照页面的维度,将所有页面的操作提炼成按钮组业务组件,然后需要聚合的页面进行引入。

项目基于React框架开发的,所以代码写法是JSX语法,组件开发使用的hooks函数式组件,UI框架使用的是antd。

二、实现

2.1 提炼组件

以页面维度,提炼页面按钮组件ButtonGroup.jsx。下面是我的项目文件结构:

受理页面的操作按钮组件

主要操作包括受理和编辑,这两个操作的交互都是打开表单弹窗。

return (
<><buttononClick={() =>this.updataOperate('visible')}>编辑</button><buttononClick={() =>this.updataOperate('acceptVisible')}>受理</button></>);

基本上所有的页面都是上面类似的修改,区别在于有的页面操作按钮多一些,有的页面按钮少一些。无论那种交互方式,能够提炼公共方法的尽量提炼公共方法。

2.2 特殊处理

比如编辑按钮,待办页面所有节点都展示编辑按钮,但是节点页面中只有受理页面有,这个时候待办页面的待受理节点不应该重复展示编辑按钮,所以我设置了一个btnFlag变量。主要有两个值,accept-受理页面, other-其他引入受理按钮组的都传这个值。

受理页面的操作按钮组件

根据btnFlag的值判断编辑按钮是否展示,当值为accept时展示,其他值不展示。

return (
<>    {btnFlag==='accept'?<buttononClick={() =>this.updataOperate('visible')}>编辑</button> : null}<buttononClick={() =>this.updataOperate('acceptVisible')}>受理</button></>);


2.3 引入使用

待办页面

文件相对路径:pending.jsx

待办页面将所有的按钮组引入之后,按照节点值进行区分。

importAcceptButtonGroupfrom'../accept/components/ButtonGroup'; // 带受理importdefineButtonGroupfrom'../define/components/ButtonGroup'; // 待确定/** * 列表操作 */columns=columns.concat([
  {
title: '操作',
key: 'action',
width: 160,
fixed: 'right',
render: (text, record) => (
<>        {record.node==='accept'&&<AcceptButtonGrouprecord={record} />}
        {record.node==='define'&&<DefineButtonGrouprecord={record} />}
</>    ),
  },
]);

2.4 后续开发

既然有了这个聚合的开始,后面再有新需求的时候,我们的产品经理就会按照他想要的去规划操作按钮的摆放位置,比如某个处理操作,他会将需要放到哪些页面列出来,这个时候,把处理按钮提炼出来,开发就非常愉快了,所有需要的页面直接引入完事。

2.5 再一次化繁为简

果然不出我所料,我们和(ai)蔼(gao)可(shi)亲(qing)的产品经理近期又提了一个小功能,根据不同客户端操作的数据,在管理后台中区别展示操作按钮,客户端A操作进入管理后台的数据展示操作A1、A2...等,客户端B操作进入管理后台的数据展示操作B1、B2...等,管理后台原来的操作数据不变。

既然已经有了多个操作按钮聚合的设计思路,这次我设计思路也很快就有了,那就是按照端的维度封装按钮组的组件。

客户端A按钮组的组件

return (
<><buttononClick={() => {}}>查看备注</button></>);

客户端B按钮组的组件

return (
<><buttononClick={() => {}}>查看取消原因</button></>);

列表页区分端公共方法

将获取操作的系统的类型的函数提炼成公共方法。

/**   * 获取操作的系统的类型   * @param {Object} record 列表操作数据项   * @param {string} type 校验端类型 前端定义字符串是为了更加语义化一些   * @return {void}   */getCreatDataCMSType(record, type) {
constCMSTypeMap= {
init:1,
A: 2,
B: 3,
    };
constCMSTypeType=CMSTypeMap[type];
constCMSType=record.CMSType?record.CMSType : 'init';
letflag=false;
if (CMSType===CMSTypeType) {
flag=true;
    }
returnflag;
  },

列表页展示

importButtonGroupAfrom'./components/ButtonGroupA';
importButtonGroupBfrom'./components/ButtonGroupB';
import { util } from'@/utils';
......{util.getCreatDataCMSType(record, 'A') ?<ButtonGroupArecord={record} /> : null}
{util.getCreatDataCMSType(record, 'B') ?<ButtonGroupBrecord={record} /> : null}

三、总结

就小技巧而言,这个功能并不是很难实现,其实更多的是它带给我的启示,后续的开发中受益匪浅。

打破原来的习惯,在最初会觉得有点痛苦,一旦开始,就会一直想怎么把东西做的更好,会对自己吹毛求疵,总觉得不够。

同时,我会根据业务的的发展,提前考虑一些功能,怎么设计开发能够在后续的需求里尽可能的复用,进而减少重复的开发。

我一直没想过操作按钮也可以提炼公共组件,因为太习惯直接上来就开发了。但是就当前业务发展,很多操作,可能会交叉的出现不同的页面中,提炼公共组件就很有必要了。

目录
相关文章
|
11月前
|
前端开发 算法 Java
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
伪类:伪类这个叫法源自于它们跟类相似,但实际上并没有类会附加到标记中的标签上。 伪类分为两种(以及新增的伪类选择器): UI伪类:会在HTML元素处于某种状态时(例如:鼠标指针位于连接上),为该元素应用CSS样式。 :hover 结构化伪类:会在标记中存在某种结构上的关系时 例如: 某元素是一组元素中的第一个或最后一个,为该元素应用CSS样式。 :not和:target(CSS3新增的两个特殊的伪类选择器)
1280 2
|
前端开发 JavaScript 开发者
前端 CSS 优化:提升页面美学与性能
前端CSS优化旨在提升页面美学与性能。通过简化选择器(如避免复杂后代选择器、减少通用选择器使用)、合并样式表、合理组织媒体查询,可减少浏览器计算成本和HTTP请求。利用硬件加速和优化动画帧率,确保动画流畅。定期清理冗余代码并使用缩写属性,进一步精简代码。这些策略不仅加快页面加载和渲染速度,还提升了视觉效果,为用户带来更优质的浏览体验。
|
12月前
|
存储 前端开发 安全
实现“永久登录”:针对蜻蜓Q系统的用户体验优化方案(前端uni-app+后端Laravel详解)-优雅草卓伊凡
实现“永久登录”:针对蜻蜓Q系统的用户体验优化方案(前端uni-app+后端Laravel详解)-优雅草卓伊凡
453 5
|
前端开发 安全 开发工具
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
1190 90
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
JavaScript 前端开发 程序员
前端原生Js批量修改页面元素属性的2个方法
原生 Js 的 getElementsByClassName 和 querySelectorAll 都能获取批量的页面元素,但是它们之间有些细微的差别,稍不注意,就很容易弄错!
820 1
|
Dart 前端开发
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
620 75
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
存储 前端开发 JavaScript
调用DeepSeek API增强版纯前端实现方案,支持文件上传和内容解析功能
本方案基于DeepSeek API增强版,提供纯前端实现的文件上传与内容解析功能。通过HTML和JavaScript,用户可选择文件并调用API完成上传及解析操作。方案支持多种文件格式(如PDF、TXT、DOCX),具备简化架构、提高响应速度和增强安全性等优势。示例代码展示了文件上传、内容解析及结果展示的完整流程,适合快速构建高效Web应用。开发者可根据需求扩展功能,满足多样化场景要求。
4443 64
|
IDE 前端开发 开发工具
用通义灵码IDE做产品高保真原型和前端页面
通义灵码IDE助力高效开发,告别传统Axure原型图的繁琐沟通。通过该工具可直接生成高保真产品原型与前端页面,大幅提升客户确认效率及满意度。现已将相关演示发布至B站(https://www.bilibili.com/video/BV18qT7ziEb7/?vd_source=dc6a6864c895818db6ce4170d50b3557),欢迎体验!用直观操作代替反复说明,让交付更流畅。
1016 1
|
Dart 前端开发 容器
【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
626 18
【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
JSON 前端开发 API
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
1139 5
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡

热门文章

最新文章

  • 1
    前端如何存储数据:Cookie、LocalStorage 与 SessionStorage 全面解析
    1365
  • 2
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
    645
  • 3
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
    501
  • 4
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
    503
  • 5
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
    609
  • 6
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
    791
  • 7
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
    1561
  • 8
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(三):元素继承关系、层叠样式规则、字体属性、文本属性;针对字体和文本作样式修改
    365
  • 9
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
    1280
  • 10
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
    615