html5中折叠面板,Ant Design中折叠面板Collapse

这段时间做react项目遇到一些平常并不会去在意的问题,但解决的时候又需要思考一番。这次开发用到了蚂蚁金服的UI框架Ant Design。项目中有一个模块的样式和功能用到了折叠面板Collapse组件来实现。但是开发完成后有一个问题被产品提到了。

问题是这样的,因为我们有一个公告展示的列表,是分页展示的,当用户在第某一页面打开一个或多个面板并且没有关闭就去点击其他的页码,当他再次返回到当前页面时折叠面板仍然是展开的。产品的要求是当用户在某一页打开折叠面板,从别的页面再次回来的时候要求折叠面板都关闭。我感觉这个并不影响什么,既然产品提出来了我们就要着手解决他。

翻看了官方文档提供的API动手实践了一下发现可以通过activeKey(数字数组/字符串数组)属性和事件onChange来实现。接下来我们来看看实现的方法(可能还有很多更好的方法,我目前只想到了这一种,有更好实现的大佬希望可以指教,感谢!)。在这个项目中用的react的新特性hooks,而且由于消息分类页面有好几个所以是把Collapse抽离出来一个组件,所以涉及到了组件之间的传值。

抽离的Collapse(子组件)组件:

import React, { useState } from "react";

import { Collapse } from "antd";

import Templatelist from "components/notice/listDom";//这个是面板header内容根据自己项目来定

interface props {//项目用到了ts

dataList: any;//父组件传过来的消息数据

changeKeys: Function;//父组件传过来的方法

keys?: Boolean;//父组件传过来的一个boolean类型的值,用它来控制面板是否折叠,注意:true表示折叠,false表示展开

}

export default function noticeCollapse({ dataList, changeKeys, keys }: props) {

const { Panel } = Collapse;

let [key, setKey] = useState([]);//声明了一个状态key用来存储展开的面板

function handleKeyChange(e) {//实现Collapse自带的onChange方法

changeKeys(false);//触发面板的onChange时设置父组件的show为false,即此时activeKey的值为key

setKey(e);存储当前点开的面板值到key中

}

return (

expandIconPosition="right"

activeKey={keys ? [] : key}//如果keys为true设置面板展开数量为空,即都折叠

onChange={handleKeyChange}

>

{dataList && dataList.length > 0

? dataList.map(item => (

header={}

key={item.messageId}

>

className="contentW"

dangerouslySetInnerHTML={{ __html: item.content }}

>

))

: ""}

);

}

引用Collapse的组件(父组件)

import React, { useEffect, useState } from "react";

import Layout from "components/layout";//项目公共布局组件

import { Noticelist, PaginationBox } from "components/ui/notice";//公共样式组件

import { Pagination } from "antd";//antd分页组件

import MangeVoid from "components/manage/manage-void";//若消息为空展示的空页面组件

import { getMgMsg } from "api/notice";//获取数据的方法

import NoticeCollapse from "components/notice/collapse";//引入抽离的Collapse组件

function NoticeBaseInfo() {

let [show, setShow] = useState(false);//控制面板的折叠隐藏,需要传给抽离的Collapse组件

const [allMsg, setmgMsg] = useState({//存放消息数据

total: 0,

list: [],

pageSize: 10,

pageNum: 1

});

let [isvoid, setVoid] = useState(false);//这个作用是为了在异步加载数据时防止空页面闪一下

let initMsg = pageNum => {

getMgMsg("", pageNum, allMsg.pageSize).then(res => {

if (res.msg == "success" && res.data) {

setmgMsg({ ...res.data, pageNum });

if (!isvoid) {

setVoid(true);

}

}

});

};

useEffect(() => {

initMsg(allMsg.pageNum);

}, []);

function handleChange(page) {//分页方法

initMsg(page);

setShow(true);//当点击分页的时候我们设置show为true,即让面板都折叠

}

return (

{isvoid && allMsg.list.length == 0 ? (

) : (

dataList={allMsg.list}

keys={show}//把show传给子组件

changeKeys={(status) => setShow(status)}//接收子组件传来的值,并赋值给show

>

)}

{allMsg.total > 10 ? (

showSizeChanger={false}

current={allMsg.pageNum}

total={allMsg.total}

hideOnSinglePage={true}

onChange={handleChange}

>

) : (

""

)}

);

}

export default NoticeBaseInfo;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/367945.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在JBoss的服务器端正确解码URL参数

我今天花了很多时间来弄清楚如何在运行在JBoss上的JSF应用程序中(使用JBoss 7 Final)强制正确解码编码的字符。 当您有例如通过URL传递中文字符时,就会出现此问题。 假设您有指点事件,编码为%E6%8C&#xf…

三剑客 老大:awk命令用法

awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入(stdin)、一 个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用&…

SpriteKit在复制节点时留了一个巨坑给开发者,需要开发者手动把复制节点的isPaused设置为false...

根据When an overlay node with actions is copied there is currently a SpriteKit bug where the node’s isPaused property might be set to true提示,SpriteKit有一个Bug需要开发者自己来填。 SpriteNode节点在被copy()复制后,会自动被设置为暂停&a…

HTML5 Shiv #8211; 让该死的IE系列支持HTML5吧

下面是引用Google的html5.js文件&#xff0c;好处就不说了&#xff1a; <!--[if IE]><script src”http://html5shiv.googlecode.com/svn/trunk/html5.js”></script>< ![endif]--> 将上代码复制到head部分&#xff0c;记住一定要是head部分&#xf…

android如何导入活动,关于android:如何将活动值传递给另一个活动(Kotlin)

我是Kotlin的新手&#xff0c;我正在尝试为我的应用进行设置活动&#xff0c;我希望该活动将其价值传递给其他活动。 我尝试了不同的代码&#xff0c;但没有一个起作用&#xff0c;我尝试制作一个共享的首选项文件&#xff0c;但我不知道如何编写代码要清楚&#xff0c;我想将字…

Mockito –带有注释和静态方法的额外接口

在代码中&#xff0c;我最近遇到了一段非常糟糕的代码&#xff0c;这些代码基于对对象执行某些操作的类转换。 当然&#xff0c;代码需要重构&#xff0c;但是如果您首先没有对该功能进行单元测试&#xff0c;则有时您可能无法做到/或者不想这样做&#xff08;这应该是可以理解…

怎么把原来的墙拆掉_家装拆除不是简单的砸砸墙,它也是有技术的

装修拆除中有很多人认为&#xff0c;拆除施工没有什么技术含量&#xff0c;感觉就像小品演的那样&#xff0c;挥挥大锤砸砸墙就可以了。所以有的人图便宜就从马路上随便找的工人来砸墙&#xff0c;他们不管是不是承重墙&#xff0c;只要业主要求他们就敢咋&#xff0c;后果真有…

20180209-os模块

下面将学习关于os模块的相关操作 项目练习的目录结构如下&#xff1a;所有的操作都是基于os_exercise.py模块 1.获取当前的Python脚本的工作目录路径 os.getcwd() # 1.获取当前目录 dir os.getcwd() print(获取当前python脚本工作目录:,dir) # 输出 # 获取当前python脚本工作目…

UOJ #188. 【UR #13】Sanrd

Description 给定 \(\sum_{il}^r f[i]\)\(f[i]\) 把 \(i\) 的每一个质因子都从小到大排列成一个序列(\(p_i^{c_i}\)要出现 \(c_i\) 次)后 , 第二大的质因子.题面 Solution 符合 \(Min25\) 筛的处理顺序. 递归处理每个质因子作为次大值时的贡献,和不作为次大值时贡献的方案数 , …

关于IE6.7.8.FF兼容的问题

所有浏览器 通用 height: 100px; IE6 专用 _height: 100px;IE6 专用 *height: 100px; IE7 专用 * height: 100px; IE7、FF 共用 height: 100px !important; 一、CSS 兼容 以下两种方法几乎能解决现今所有兼容. 1, !important (不是很推荐&#xff0c;用下面的一种感觉最安…

冯珊珊_模拟器企业衡泰信签约冯珊珊,推动高尔夫运动下沉

9月21日&#xff0c;著名高尔夫模拟器企业衡泰信宣布签约中国高尔夫球员冯珊珊&#xff0c;双方正式达成全面战略合作&#xff0c;旨在共同推动室内高尔夫运动的普及与推广&#xff0c;让更多人参与并喜爱上这项运动&#xff0c;推动全民健身目标&#xff0c;借助互联网、智慧场…

MOXy是GlassFish 4中新的默认JSON绑定提供程序

GlassFish 4现在可以提供完整的Java EE 7&#xff08;JSR-342&#xff09;平台。 EclipseLink为该发行版做出了一些重大贡献。 首先是提供JPA 2.1&#xff08;JSR-338&#xff09;实现。 我将在本文中介绍的第二个内容是EclipseLink MOXy&#xff0c;它现在是JAX-RS应用程序的默…

假期第四周周总结

第四周&#xff1a; 本周做了什么&#xff1a;由于第一次科三没过&#xff0c;只能再约一次&#xff0c;两天在练科三&#xff0c;其他时间都在安装oracle&#xff0c;虚拟机&#xff0c;并配置环境&#xff0c;学习oracle数据库&#xff0c;并改进河北创新科技平台系统 收获是…

通过form实现enter事件

结构 <form action‘#’> <input typesearch /> <button>搜索</button> </form> 在这种情况下即使给button加上事件&#xff0c;按enter键也会执行点击事件中的代码&#xff08;pc-移动web皆可以&#xff09;。&#xff08;action需为javascript…

CSS3之background的调整和增加的属性

对于background做了一些修改&#xff0c;最明显的一个就是采用设置多背景&#xff0c;不但添加了4个新属性&#xff0c;并且还对目前的属性进行了调整增强。 1、多个背景图片 在css3里面&#xff0c;你可以再一个标签元素里应用多个背景图片。代码类似与css2.0版本的写法&…

html 天气特效,用CSS制作天气特效动画,源码分享

效果图今天给大家带来的是CSS3动画天气图标代码&#xff0c;简单实用好看&#xff01;CSS源码&#xff1a;html { box-sizing: border-box; }html *,html *:before,html *:after { box-sizing: inherit; }body {max-width: 42em;padding: 2em;margin: 0 auto;color: #161616;fo…

做折线图坐标轴数字_Excel折线图表的另类表达制作?牛闪君使用了双线表达法来完成...

牛闪闪办公第846个原创技巧Zloffice社群的小伙伴还是很爱学习的&#xff0c;这不&#xff0c;有一位小伙伴看到“特殊”图表表达&#xff0c;想知道是怎么做出来的。这种学习的思路非常好&#xff0c;看到好的表达就想学习&#xff0c;这是非常好的收集习惯&#xff0c;能够积累…

Spring MVC控制器的单元测试:“普通”控制器

本教程的第一部分描述了如何配置使用Spring MVC Test框架的单元测试 。 现在是时候动手做&#xff0c;学习如何为“常规”控制器编写单元测试了。 显而易见的下一个问题是&#xff1a; 什么是普通控制器&#xff1f; 好吧&#xff0c;一个普通的控制器&#xff08;在此博客文…

回溯法

一、概念&#xff1a;回溯法也是一种枚举&#xff0c;但是回溯法将枚举(生成&#xff09;和检查有机结合起来&#xff0c;从而减少了不必要的枚举。。 二、经典八皇后问题。 #include<iostream> #include<cmath> using namespace std;int vis[100]; int store[100]…

【Spring】入门HelloWorld

参考&#xff1a;https://www.yiibai.com/spring/spring-tutorial-for-beginners.html 一、创建项目 1.利用IntelliJ创建Maven项目2.配置pom.xml,引入Spring <?xml version"1.0" encoding"UTF-8"?> 4.0.0 <groupId>com.jh</groupId> &…