公司项目自定义组件(antd折叠面板+antd多选框)传值数问题解决方案

本文主要是介绍公司项目自定义组件(antd折叠面板+antd多选框)传值数问题解决方案,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

公司项目自定义组件传值数问题解决方案

2022/1/22 from gxc

公司需求在代码注释中

代码:

import React, { Component } from "react";
import { Collapse, Checkbox, Form, Button } from "antd";const { Panel } = Collapse;class CollapseSelectBoxDiv extends Component {constructor(props) {super(props);this.state = {CollapseSelectArray: []}}// 自定义组件内的多选框点击事件// 想要实现的是:当使用该自定义组件时当用户选择完外域平台后,最后生成一个数组对象/* 例: [ {title: '外域平台1',list: [{title:'人员库1'},.....]},..... ]*/checkChange = (e, index, Pvalue, Mvalue) => {console.log('Pvalue', Pvalue); //当前多选框的父组件(即当前打开的折叠面板的数据)console.log('Mvalue', Mvalue); //当前多选框的数据const newArray = [...this.state.CollapseSelectArray] // 当前state存储最终外域平台数据的字段if (e.target.checked) { // 当当前多选框为选中状态时let PtitleArray = []for(let i = 0;i < newArray.length;i ++){ // 遍历外域平台数据PtitleArray.push(newArray[i].title) // 将其平台数据生成一个新数组为后面判定是否已经选择过该平台做准备}if (PtitleArray.includes(Pvalue)) { // 判定已选中的平台中是否存在当前平台newArray.map((item) => { // 如果存在该平台则无需新增平台数组数据,只需在该平台数据的list数组中加入该多选框的数据即可if (item.title === Pvalue) { // 使用map循环进行判定和list中的数据插入并returnreturn item.list.push({ Mvalue })}})setTimeout(() => {  // 同步将数据返回回state中this.setState({CollapseSelectArray: newArray})})}else { // 如果当前平台未被选中过,即将该平台数据以及多选框的数据以{ title:'当前平台',list[当前多选框数据] }console.log('out')newArray.push({ title: Pvalue, list: [{ Mvalue }] })setTimeout(() => {this.setState({CollapseSelectArray: newArray})})}console.log('newArray true checked', newArray)}else { // 当当前多选框为未选中状态时,在newArray中删除该多选框数据for (let n = 0; n < newArray.length; n++) {if (newArray[n].title === Pvalue) {// 遍历newArray找到当前平台(因为当前为未选中的话之前必定为选中状态,即在newArray中有该平台以及这个数据。)newArray[n].list.map((item, index) => {// 在该平台数据的list中找到多选框的数据删掉if (item.Mvalue === Mvalue) {newArray[n].list.splice(index, 1)return (newArray[n].list)}})// 当该平台数据中的list数据为空时,意味着该平台下无被选中的数据,即该平台未被选中,即将该平台从newArray中删掉if(newArray[n].list.length === 0){newArray.splice(n)}}}console.log('newArray else checked', newArray)setTimeout(()=>{// 最后赋值statethis.setState({CollapseSelectArray: newArray})})}}render() {return (<Collapse onChange={this.changeCollapse}>{// console.log('this.props.parent',this.props.parent)this.props.parent.state.DownData.map((item, index) => {return (<Panel header={item.title} key={index}>{item.list.map((it, ix) => {return (<Checkbox key={ix} onChange={(e) => { this.checkChange(e, it.key, item.title, it.title) }} >{it.title}</Checkbox>)})}</Panel>)})}</Collapse>)}
}class FormShow extends Component {constructor(props) {super(props);this.state = {}}Submit = (e) => {e.preventDefault();this.props.form.validateFields((err, value) => {console.log('Form Value', value)})}render() {const { getFieldDecorator } = this.props.form;return (<Form onSubmit={this.Submit}><Form.Item label="请选择外域平台">{getFieldDecorator('CollapseSelect', {})(<CollapseSelectBoxDiv parent={this.props.parent} />)}</Form.Item><Form.Item><Button type='primary' htmlType="submit">完成</Button></Form.Item></Form>)}
}const CollapseSelectForm = Form.create({ name: 'CollapseSelectData' })(FormShow)export default CollapseSelectForm

显示样式:
使用折叠面板及多选框
欢迎各位修改问题,指出错误

🆗

这篇关于公司项目自定义组件(antd折叠面板+antd多选框)传值数问题解决方案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/807609

相关文章

精选20个好玩又实用的的Python实战项目(有图文代码)

《精选20个好玩又实用的的Python实战项目(有图文代码)》文章介绍了20个实用Python项目,涵盖游戏开发、工具应用、图像处理、机器学习等,使用Tkinter、PIL、OpenCV、Kivy等库... 目录① 猜字游戏② 闹钟③ 骰子模拟器④ 二维码⑤ 语言检测⑥ 加密和解密⑦ URL缩短⑧ 音乐播放

Springboot项目启动失败提示找不到dao类的解决

《Springboot项目启动失败提示找不到dao类的解决》SpringBoot启动失败,因ProductServiceImpl未正确注入ProductDao,原因:Dao未注册为Bean,解决:在启... 目录错误描述原因解决方法总结***************************APPLICA编

使用Python构建智能BAT文件生成器的完美解决方案

《使用Python构建智能BAT文件生成器的完美解决方案》这篇文章主要为大家详细介绍了如何使用wxPython构建一个智能的BAT文件生成器,它不仅能够为Python脚本生成启动脚本,还提供了完整的文... 目录引言运行效果图项目背景与需求分析核心需求技术选型核心功能实现1. 数据库设计2. 界面布局设计3

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3

Java.lang.InterruptedException被中止异常的原因及解决方案

《Java.lang.InterruptedException被中止异常的原因及解决方案》Java.lang.InterruptedException是线程被中断时抛出的异常,用于协作停止执行,常见于... 目录报错问题报错原因解决方法Java.lang.InterruptedException 是 Jav

解决RocketMQ的幂等性问题

《解决RocketMQ的幂等性问题》重复消费因调用链路长、消息发送超时或消费者故障导致,通过生产者消息查询、Redis缓存及消费者唯一主键可以确保幂等性,避免重复处理,本文主要介绍了解决RocketM... 目录造成重复消费的原因解决方法生产者端消费者端代码实现造成重复消费的原因当系统的调用链路比较长的时

kkFileView在线预览office的常见问题以及解决方案

《kkFileView在线预览office的常见问题以及解决方案》kkFileView在线预览Office常见问题包括base64编码配置、Office组件安装、乱码处理及水印添加,解决方案涉及版本适... 目录kkFileView在线预览office的常见问题1.base642.提示找不到OFFICE组件

深度解析Nginx日志分析与499状态码问题解决

《深度解析Nginx日志分析与499状态码问题解决》在Web服务器运维和性能优化过程中,Nginx日志是排查问题的重要依据,本文将围绕Nginx日志分析、499状态码的成因、排查方法及解决方案展开讨论... 目录前言1. Nginx日志基础1.1 Nginx日志存放位置1.2 Nginx日志格式2. 499

SpringBoot监控API请求耗时的6中解决解决方案

《SpringBoot监控API请求耗时的6中解决解决方案》本文介绍SpringBoot中记录API请求耗时的6种方案,包括手动埋点、AOP切面、拦截器、Filter、事件监听、Micrometer+... 目录1. 简介2.实战案例2.1 手动记录2.2 自定义AOP记录2.3 拦截器技术2.4 使用Fi

kkFileView启动报错:报错2003端口占用的问题及解决

《kkFileView启动报错:报错2003端口占用的问题及解决》kkFileView启动报错因office组件2003端口未关闭,解决:查杀占用端口的进程,终止Java进程,使用shutdown.s... 目录原因解决总结kkFileViewjavascript启动报错启动office组件失败,请检查of