如上图所示,假设这是一个传统的秒杀购买场景:

(1)问题概述:

        状态: (1)进入秒杀  (2)进入秒杀  (3)立即预约  (4)宝贝秒光  (5)活动结束

        文字:   进入 秒杀文字颜色#fff,其他文字颜色都是 #ff3B56;
              宝贝秒光,活动结束,文字带透明度30%;

        描边:   只有立即预约有描边,其他状态都没有

       按钮透明度:立即预约 8%  进入秒杀  100%  宝贝秒光  8% 活动结束   8%

(2)解决方案:

拿到这个问题,首先很多人想想到的是通过,if else判断展示逻辑,但是 实际使用这种方式,情况会变得很复杂,而且难以维护;

方式一:逻辑判断

 {/* 立即预约、宝贝秒光,活动结束 */}{+v.status === 3 || +v.status === 4 || +v.status === 5 ? <ViewclassName='benifit-wrapper'onClick={() => {goYuYUe(v);}}style={{ background: titleColor, opacity: '0.06'}}
>{+v.status === 3 ? <Text style={{ color: titleColor, border: '3px solid #ccc', borderColor: titleColor }} className="benifit" lines={1}>{getBtnText(v.status)}</Text> : <Text style={{ color: titleColor}} className="benifit" lines={1}>{getBtnText(v.status)}</Text>}
</View> : <ViewclassName='benifit-wrapper'onClick={() => {goYuYUe(v);}}style={{ background: titleColor}}
><Text style={{ color: '#fff' }} className="benifit" lines={1}>{getBtnText(v.status)}</Text>
</View>
}

这里只是html的判断逻辑其实还要加上CSS的处理,相当的麻烦,这里不再概述;

方式二:CSS和html抽离,进行CSS注入

const BTN_STATUS = [{ id: 1, des: '进入秒杀' },{ id: 2, des: '进入秒杀' },{ id: 3, des: '立即预约' },{ id: 4, des: '宝贝已秒光' },{ id: 5, des: '秒杀已结束' },
];const getBtnText = (text) => {const filterText = BTN_STATUS.filter((v) => {if (+v.id === +text) {return v.des;}});return filterText[0].des;
};//16进制转RGBconst colorToRGB = (color, opt) => {let color1, color2, color3;color = '' + color;if (typeof color !== 'string') return;if (color.charAt(0) == '#') {color = color.substring(1);}if (color.length == 3) {color = color[0] + color[0] + color[1] + color[1] + color[2] + color[2];}if (/^[0-9a-fA-F]{6}$/.test(color)) {color1 = parseInt(color.substr(0, 2), 16);color2 = parseInt(color.substr(2, 2), 16);color3 = parseInt(color.substr(4, 2), 16);return 'rgb(' + color1 + ',' + color2 + ',' + color3 + ',' + opt + ')';}};// realList就是实际列表的数据{realList.map((v, index) => {switch (+v?.status) {case 1:btnStyle = {backgroundColor: titleColor,color: '#fff',border: 0,opacity: 1};break;case 2:btnStyle = {backgroundColor: titleColor,color: '#fff',border: 0,opacity: 1};break;case 3:btnStyle = {backgroundColor: colorToRGB(titleColor, 0.06),color: titleColor,border: `1px solid ${titleColor}`,opacity: 1};break;case 4:btnStyle = {backgroundColor: colorToRGB(titleColor, 0.06),color: titleColor,border: 0,opacity: 0.3};break;case 5:btnStyle = {backgroundColor: colorToRGB(titleColor, 0.06),color: titleColor,border: 0,opacity: 0.3};break;default:break;}return v?.status ? (<li><ViewclassName="benifit-wrapper"style={{border: btnStyle.border,background: btnStyle.backgroundColor,color: btnStyle.color,}}><Text className="benifit" lines={1} style ={{ opacity: `${btnStyle.opacity}`}}>{getBtnText(v.status)}</Text></li>)}
)}

如上述代码,我们将css和 html进行解耦,然后 通过不同的状态对应的css通过btnStyle,注入到html中;

一个列表中按钮的不同样式相关推荐

  1. (如何从一个列表中随机抽样)np.random.choice(),random.sample()

    文章目录 前言 numpy random.sample() 前言 个人觉得np.random.choice()功能更加强大,random.sample()可以做到的,前者都可以做到. numpy 这个 ...

  2. 打印1-400以内 能同时被5和9 整数的数将这些数放入一个列表中,再输出这个列表

    import java.util.ArrayList;/*** @author silence* 打印1-400以内 能同时被5和9 整数的数将这些数放入一个列表中,再输出这个列表*/ public ...

  3. python中如何编写代码输入多个数据并把它们放在一个列表中去_10分钟学习函数式Python...

    在这篇10分钟的文章中,您将学习Python中的函数式范型.您还将学习列表推导式. 目录 函数式范式 Python的map函数是如何运行的 Python中的lambda表达式 Python中的redu ...

  4. 萌新的Python练习实例100例(七)将一个列表的数据复制到另一个列表中

    题目: 将一个列表的数据复制到另一个列表中 分析: · 这道题是联系list和切片的使用: 方法1: · 将b的值赋予a: · a[0:3]表示使用切片从0位置开始到第3位置结束: · a[:3]表示 ...

  5. Python-将一个列表的数据复制到另一个列表中

    # 题目:将一个列表的数据复制到另一个列表中 list1 = [x for x in range(1,5)]list2 = []print(list1)print(list2) #初始化 print( ...

  6. python两两组合_python – 一个列表中的两个组合列表

    我是一个Python初学者.我想从一个列表中获取两个组合列表. 例如,我有一个列表: c = [1, 2, 3, 4] 我想使用每四个项目来获得每个可能的组合来填充两个列表.将会有((2 ^ 4)/ ...

  7. python统计列表中元素个数_python中计算一个列表中连续相同的元素个数方法

    python中计算一个列表中连续相同的元素个数方法 最简单的例子: a = [1,1,1,1,2,2,2,3,3,1,1,1,3] # 问:计算a中最多有几个连续的1 很明显,答案是4 如果用代码实现 ...

  8. python单稳态触发_使用 方法可以获取一个列表中最大元素的值。_学小易找答案...

    [填空题]若在列表的最后添加新元素,则可以直接使用列表的 方法. [填空题]将一个线程的 属性设置为True,则该线程为守护线程. [填空题]是在调用函数时函数名后面的一对小括号中给出的参数列表. [ ...

  9. python批量清除一个列表中的某个内容,filter和lambda结合使用的方法

    利用python的filter和lambda,可以批量删除某一项内容,list里面有一些内容使我们不想要的,使用pop或者remove也是可以的,但是都是只会删除一个. 使用下面的方法,比较有效率一些 ...

最新文章

  1. python-pcl官网 应用、特征、过滤Filter教程翻译
  2. 【HTTP协议】超详细的HTTP协议详解
  3. Spring原理简述
  4. 朋友圈 H5 进化简史
  5. SAP 调用smartforms打印如何统计实际打印状态和打印次数
  6. Kafka创建Topic时如何将分区放置到不同的Broker中
  7. select及触发方式,select监听多链接,select与epoll的实现区别
  8. 云计算在未来一定是不可或缺的
  9. 1295 N皇后问题
  10. c++ hough变换代码_hough变换原理以及实现(转载)
  11. 古代婚姻和现代社会矛盾了。导致大量大龄女性未婚
  12. 剑指offer——面试题17:合并两个排序的链表
  13. HDU 1503 Advanced Fruits
  14. web安全:X老师上课讲了Robots协议,小宁同学却上课打了瞌睡,赶紧来教教小宁Robots协议是什么吧
  15. 政府大数据服务,跑马圈地正当时
  16. 人,羊,狼,菜过河问题的计算机编程实现的matlab程序,人狼羊菜渡河问题(含Matlab程序)...
  17. golang开发环境之Sublime Text 2+GoSublime+gocode+MarGo
  18. Docker 入门教程(一) - Docker Tutorial
  19. 全国高等学校计算机等级考试大纲,全国高等学校计算机等级考试大纲.doc
  20. 全新最简易Git教程(内含视频链接)

热门文章

  1. Linux上的TIME_WAIT和tcp_fin_timeout
  2. Idris趋近发布1.0版
  3. POJ 1671 第二类斯特林数
  4. win8.1 USB启动盘制作(不支持UEFI,不支持GPT分区)
  5. sql server 2008 日志处理
  6. PHP json_decode 对 JSON 格式的字符串进行编码并获取对应的值
  7. 修正IE6中FIXED不能用的办法,转载
  8. 【感想文】找到自己的兴趣所在,坚持下去。写文章,学习,我的坚持。
  9. JDBC , 使用java来控制mysql。JavaWeb开发的分层设计-三层架:DAO层设计,连接池使用,类加载使用,配置...
  10. 非正常关闭vi编辑器时会生成一个.swp文件