公司项目自定义组件(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

相关文章

MybatisGenerator文件生成不出对应文件的问题

《MybatisGenerator文件生成不出对应文件的问题》本文介绍了使用MybatisGenerator生成文件时遇到的问题及解决方法,主要步骤包括检查目标表是否存在、是否能连接到数据库、配置生成... 目录MyBATisGenerator 文件生成不出对应文件先在项目结构里引入“targetProje

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J

numpy求解线性代数相关问题

《numpy求解线性代数相关问题》本文主要介绍了numpy求解线性代数相关问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 在numpy中有numpy.array类型和numpy.mat类型,前者是数组类型,后者是矩阵类型。数组

解决systemctl reload nginx重启Nginx服务报错:Job for nginx.service invalid问题

《解决systemctlreloadnginx重启Nginx服务报错:Jobfornginx.serviceinvalid问题》文章描述了通过`systemctlstatusnginx.se... 目录systemctl reload nginx重启Nginx服务报错:Job for nginx.javas

Redis缓存问题与缓存更新机制详解

《Redis缓存问题与缓存更新机制详解》本文主要介绍了缓存问题及其解决方案,包括缓存穿透、缓存击穿、缓存雪崩等问题的成因以及相应的预防和解决方法,同时,还详细探讨了缓存更新机制,包括不同情况下的缓存更... 目录一、缓存问题1.1 缓存穿透1.1.1 问题来源1.1.2 解决方案1.2 缓存击穿1.2.1

深入理解Redis大key的危害及解决方案

《深入理解Redis大key的危害及解决方案》本文主要介绍了深入理解Redis大key的危害及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一、背景二、什么是大key三、大key评价标准四、大key 产生的原因与场景五、大key影响与危

Python 中 requests 与 aiohttp 在实际项目中的选择策略详解

《Python中requests与aiohttp在实际项目中的选择策略详解》本文主要介绍了Python爬虫开发中常用的两个库requests和aiohttp的使用方法及其区别,通过实际项目案... 目录一、requests 库二、aiohttp 库三、requests 和 aiohttp 的比较四、requ

SpringBoot项目启动后自动加载系统配置的多种实现方式

《SpringBoot项目启动后自动加载系统配置的多种实现方式》:本文主要介绍SpringBoot项目启动后自动加载系统配置的多种实现方式,并通过代码示例讲解的非常详细,对大家的学习或工作有一定的... 目录1. 使用 CommandLineRunner实现方式:2. 使用 ApplicationRunne

vue解决子组件样式覆盖问题scoped deep

《vue解决子组件样式覆盖问题scopeddeep》文章主要介绍了在Vue项目中处理全局样式和局部样式的方法,包括使用scoped属性和深度选择器(/deep/)来覆盖子组件的样式,作者建议所有组件... 目录前言scoped分析deep分析使用总结所有组件必须加scoped父组件覆盖子组件使用deep前言