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

react18【实战】tab切换,纯前端列表排序(含 lodash 和 classnames 的安装和使用)

在这里插入图片描述

技术要点

动态样式

className={`tabItem ${currentType === item.value && "active"}`}

安装 lodash

npm i --save lodash

使用 lodash 对对象数组排序(不会改变源数组)

_.orderBy(dataList, "readNum", "desc")

src\Demo.css

.tabItem {display: inline-block;padding: 10px;cursor: pointer;
}.active {color: red;
}.itemBox {width: 400px;display: flex;
}.label {font-weight: bold;padding: 10px 0;
}.left {width: 50%;
}.center {width: 25%;text-align: center;
}.right {width: 25%;text-align: center;
}

src\Demo.jsx

import { useState } from "react";
import "./Demo.css";
import _ from "lodash";function Demo() {const dataList_init = [{id: 1,title: "文章1",pubTime: "2024/5/1",readNum: 9,},{id: 2,title: "文章2",pubTime: "2024/4/1",readNum: 2,},{id: 3,title: "文章3",pubTime: "2024/5/8",readNum: 6,},];const typeList = [{value: "new",label: "最新",},{value: "hot",label: "最热",},];const [currentType, setCurrentType] = useState("");const [dataList, setDataList] = useState(dataList_init);function currentTypeChange(newType) {setCurrentType(newType);if (newType === "hot") {// 倒序排列setDataList(_.orderBy(dataList, "readNum", "desc"));}if (newType === "new") {// 倒序排列setDataList(_.orderBy(dataList, "pubTime", "desc"));}}return (<>{typeList.map((item) => (<divclassName={`tabItem ${currentType === item.value && "active"}`}key={item.value}onClick={() => currentTypeChange(item.value)}>{item.label}</div>))}<div className="itemBox label"><div className="left">文章标题</div><div className="center">发布日期</div><div className="right">阅读量</div></div>{dataList.map((item) => (<div key={item.id} className="itemBox"><div className="left">{item.title}</div><div className="center">{item.pubTime}</div><div className="right">{item.readNum}</div></div>))}</>);
}export default Demo;

使用 classnames 库改写

classnames 库可以让动态样式的书写更加清晰

安装

npm install classnames

使用

import classNames from "classnames";

className={`tabItem ${currentType === item.value && "active"}`}

改写为

className={classNames("tabItem", {active: currentType === item.value,})}
http://www.lryc.cn/news/345323.html

相关文章:

  • C++学习第二十七课:C++ 输入输出流详解:从基础到高级应用
  • 【Unity AR开发系列】介绍如何使用这个支持热更的AR开发插件,快速地开发AR应用
  • Nginx - 配置文件结构(一)
  • 暗区突围进不去/游戏无法启动/掉帧卡顿/报错的解决方法
  • 基于FPGA的视频矩阵 视频拼接 无缝切换解决方案
  • LeetCode 513.找树左下角的值
  • redis分片java实践、redis哨兵机制实现、redis集群搭建
  • 2024年四千价位段最具统治力的投影仪,坚果N1S 4K: 4K+三色激光=下一代4K
  • MySQL8.3升级踩坑记录
  • 你写的每条SQL都是全表扫描吗
  • 每日两题 / 24. 两两交换链表中的节点 25. K 个一组翻转链表(LeetCode热题100)
  • 【Linux】模拟实现bash(简易版)
  • C++ | Leetcode C++题解之第67题二进制求和
  • 如何确保UDP文件传输工具有最低稳定的传输速度?
  • 力扣爆刷第133天之动态规划收尾(距离编辑与回文子串)
  • List集合中对asList的使用
  • 软件测试所有测试方法
  • linux 下 /usr/local的作用
  • 【web网页制作】html+css旅游家乡河南开封主题网页制作(4页面)【附源码】
  • MySQL用命令行导出数据库
  • uniapp video 层级覆盖
  • SparkSQL概述
  • docker 和 docker-compose
  • 微信小程序支付(完整版)-ThinkPHP/Uniapp
  • 同时安装多个nodejs版本可切换使用,或者用nvm管理、切换nodejs版本(两个详细方法)
  • 马化腾用了一年多的时间,告诉所有人,视频号小店是新风口!
  • 代码随想录算法训练营第36期DAY19
  • C#图像:1.图像区域分割与提取
  • 炸弹使用技巧
  • SpringAop详解