当前位置: 首页 > news >正文

【React】tab切换功能和排序实现,classnames工具优化类名控制

目录

一、渲染Tab+点击高亮实现

二、排序功能实现

三、classnames工具优化类名控制


一、渲染Tab+点击高亮实现

        需求:点击哪个tab项,哪个做高亮处理

        核心思路:点击谁就把谁的Type(独一无二的标识)记录下来,然后和遍历时的每一项type做匹配,谁匹配到就设置负责高亮的类名

//tab切换功能//1.点击谁就把谁的Type(独一无二的标识)记录下来//2.通过记录的type和每一项遍历时的type做匹配,控制激活类名的显示const [type, setType] = useState("hot");const handleTabChange = (type) => {console.log(type);setType(type);};
 {/* 高亮类名: active */}{tabs.map((item) => (<spankey={item.type}onClick={() => handleTabChange(item.type)}className={`nav-item ${type === item.type && "active"}`}>{item.text}</span>))}

二、排序功能实现

需求:

        点击最新,评论列表按照创建时间倒序排列(新的在前),点击最热按照点赞数排序(多的在前)

核心思路:

        把评论列表状态数据进行不同的排序处理,当成新值传给set函数重新渲染视图UI

       lodash库

                    npm i  lodash

                   导入:import _ from "lodash";

const [type, setType] = useState("hot");const handleTabChange = (type) => {console.log(type);setType(type);//基于列表的排序//lodashif (type === "hot") {//根据点赞数进行排序setCommentList(_.orderBy(commentList, "like", "desc"));} else {//根据时间进行排序setCommentList(_.orderBy(commentList, "ctime", "desc"));}};

但是这段代码只有当你点击最热或者最新时候才会排序,我们还需要设置初始化就排序好的列表

const App = () => {

  const [commentList, setCommentList] = useState(

    _.orderBy(defaultList, "like", "desc")

  );

三、classnames工具优化类名控制

classnames是一个简单的JS库,可以非常方便的通过条件动态控制class类名的显示

问题:字符串的拼接方法不够直观,也容易出错

classnames库:

        npm install classnames

       

http://www.dtcms.com/a/342885.html

相关文章:

  • Java基础环境jdk和maven安装及配置+开源项目下载及编译打包教程
  • Flutter如何通过GlobalKey调用组件内的方法
  • 微服务的编程测评系统13-我的竞赛列表-elasticSearch
  • 与H5交互,与flutter的交互
  • 求解三位数
  • 深度解析DeepSeek V3.1 :6850 亿参数开源模型如何以 71.6% 编码得分、68 倍成本优势重构全球 AI 竞争格局
  • 使用postman模拟http请求webservice服务
  • 企业如何用外贸进销存系统管理好库存产品?
  • Docker安装elasticsearch以及Kibana、ik分词器
  • 从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(十三)
  • 相似图像处理程序
  • mac的m3芯使用git
  • 1.2 亿篇论文数据集,多学科学术语料库,涵盖医学、化学、生物学、人文、物理、工程、数学、生态、经济与计算机科学,用于 NLP、知识图谱与大模型训
  • 意象驱动的深层语义:感知认知统一对自然语言处理与知识图谱的影响
  • 数据结构——二叉树(Binary Tree)
  • 自然语言处理NLP L4: 高级语言模型——四种泛化平滑方式
  • Spring全家桶之全局异常处理
  • Spring Boot生态中ORM对数据治理的支持有哪些?
  • Ubuntu22.04配置网络上网
  • linux-ubuntu里docker的容器portainer容器建立后如何打开?
  • Maven无法修改镜像,镜像在IDEA里不生效
  • 室外和室内 PoE 延长器有什么区别?
  • [CSP-J2020] 直播获奖
  • 集成学习:从原理到实战,一文掌握 Bagging、Boosting 与 Stacking
  • 集成学习:如何让多个 “弱模型” 变成 “强模型”?
  • demo 汽车之家(渲染-筛选-排序-模块抽离数据)
  • Linux之Ansible自动化运维(二)
  • Linux内核源码详解--缺页异常(Page Fault)处理的核心函数handle_pte_fault
  • Maven(三)
  • Class A 包含字段 x Class B 也包含字段 x,如果判断List<A> lista 和 List<B> listb 有相同的 x?