前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >「React实践」不同内容相似结构?按个开关试试

「React实践」不同内容相似结构?按个开关试试

原创
作者头像
叶一一
发布2022-10-24 18:09:04
2520
发布2022-10-24 18:09:04
举报
文章被收录于专栏:趣学前端趣学前端

前言

在做需求迭代的时候,会进行开发设计,时不时会想出一些不错的点子。这些点子跳出了开发舒适圈,帮助我提升自身技术。

我将这些点子进行了整理,全部归纳为我的「工作小记」。

今天分享不同内容但是结构相似的展示,如何通过开关控制进行实现。

分享代码基于Recat Hooks实现的。

功能分析

UI

image
image

功能解析

现有功能中,鞋子看板和帽子看板的展示类型完全一致,仅不同类型下的具体数据不同。

新需求,将鞋子看板中原有的今日已付款和本月已付款改为了上月已付款和上年已付款。

开发设计

以往思路

在以往的开发思路中,自然而然的列表展示之前进行列表重组,根据看板类型的不同,区分不同内容。

代码语言:javascript
复制
if (type === 'shoses' && (item.key === '上月已付款' || item.key === '上年已付款') ) { 
    // 鞋子看板加入两项 
} 
if (type === 'hat' && (item.key === '今日已付款' || item.key === '本月已付款') ) 
{ 
    // 帽子看板加入两项 
}

如果后续新增其他类型看板或者鞋子看板新增其他项展示或者帽子看板增其他项展示,条件语句需要继续新增,不方便维护,并且容易影响已有功能。

思维转换

对于内容展示,只有展示和不展示两种情况中的一种,类似灯亮与不亮,是通过电源开关控制,这里也可以控制不同看板下的类型展示开关,即不影响原有功能,又方便后续扩展。

具体实现

设置看板变量

代码语言:javascript
复制
/** @name 看板类别对象  */
const boardObj = {
    1 : {
        key: 'shoes',
        // 唯一key
        name: '鞋子',
        // 看板展示标题
        class: 1,
        // 和后端数据对应的值
    },
    2 : {
        key: 'hat',
        name: '帽子',
        class: 2,
    },
};

设置看板展示具体项的对象

包含展示涉及的全部项,需要区分看板类型的项,设置控制开关的值。

代码语言:javascript
复制
/** @name 看板展示具体项的对象  */
const boardOption = {
    name: '看板',
    list: [{
        key: 'allPay',
        // 唯一key
        name: '全部待付款',
        // 展示名称
        selfStyle: {
            color: '#d9041b',
        },
        // 字体颜色
        sumNum: '',
        // 展示值
        sumKey: 'allPay',
        // 展示值的key
    },
    {
        key: 'today',
        name: '今日已付款',
        selfStyle: {
            color: '#2eaaaa',
        },
        sumNum: '',
        sumKey: 'today',
        moduleShowType: 'hat',
        // 模块展示控制开关
    },
    {
        key: 'month',
        name: '本月已付款',
        selfStyle: {
            color: '#2eaaaa',
        },
        sumNum: '',
        sumKey: 'month',
        moduleShowType: 'hat',
    },
    {
        key: 'lastMonth',
        name: '上月已付款',
        search: '',
        selfStyle: {
            color: '#F59A23',
        },
        sumNum: '',
        sumKey: 'lastMonth',
        moduleShowType: 'shoes',
    },
    {
        key: 'lastYear',
        name: '上年已付款',
        search: '',
        selfStyle: {
            color: '#F59A23',
        },
        sumNum: '',
        sumKey: 'lastYear',
        moduleShowType: 'shoes',
    },
    {
        key: 'year',
        name: '今年已付款',
        selfStyle: {
            color: '#2eaaaa',
        },
        sumNum: '',
        sumKey: 'year',
    },
    ],
};

数据初始化

将页面请求数据进行初始化,转换成我们需要的能展示到页面的数据。

代码语言:javascript
复制
/** @name 页面展示看板列表数组  */
const[boardList, setBoardList] = useState([]);
useEffect(() =>{
    let dataList = [{
        allPay: 1100,
        class: 1,
        month: 10,
        lastMonth: 10,
        lastYear: 100,
        today: 2,
        year: 200,
    },
    {
        allPay: 2200,
        class: 2,
        month: 20,
        lastMonth: 30,
        lastYear: 400,
        today: 2,
        year: 299,
    },
    ];
    const list = [];
    dataList.forEach(item =>{
        let boardItem = boardObj[item.class];
        boardItem.board = _.cloneDeep(boardOption);
        boardItem.board.list.forEach(board =>{
            board.sumNum = item[board.sumKey];
        });
        list.push(boardItem);
    });
    setBoardList(list);
},
[]);

看板项开关设置方法

开关的具体逻辑如下:

  • 不设置开关字段的项直接展示;
  • 设置开关字段的项,根据内容里面的具体看板类型进行展示
代码语言:javascript
复制
/**
   * 看板项开关设置方法
   * @param {Object} board 看板项数据
   * @param {Object} item 看板数据
   * @return {boolean} 看板项展示布尔值
   */
const moduleShowFlag = (board, item) =>{
    let flag = false;
    // =>true: 不设置开关字段的项直接展示
    if (!board.moduleShowType) {
        flag = true;
    } else {
        // =>true: 设置开关字段的项,根据内容里面的具体看板类型进行展示
        if (board.moduleShowType.includes(item.key)) {
            flag = true;
        }
    }
    return flag;
};

页面渲染

初始化好的列表数据循环渲染,不同看板类型展示具体项添加开关设置方法,根据返回的布尔值进行展示。

image
image

总结

一次简单的改变,可能会使前方的路豁然开朗。努力探索,继续加油。💐

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 功能分析
    • UI
      • 功能解析
        • 开发设计
          • 以往思路
          • 思维转换
      • 具体实现
        • 设置看板变量
          • 设置看板展示具体项的对象
            • 数据初始化
              • 看板项开关设置方法
                • 页面渲染
                • 总结
                相关产品与服务
                腾讯云 BI
                腾讯云 BI(Business Intelligence,BI)提供从数据源接入、数据建模到数据可视化分析全流程的BI能力,帮助经营者快速获取决策数据依据。系统采用敏捷自助式设计,使用者仅需通过简单拖拽即可完成原本复杂的报表开发过程,并支持报表的分享、推送等企业协作场景。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档