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

相关文章

SpringBoot首笔交易慢问题排查与优化方案

《SpringBoot首笔交易慢问题排查与优化方案》在我们的微服务项目中,遇到这样的问题:应用启动后,第一笔交易响应耗时高达4、5秒,而后续请求均能在毫秒级完成,这不仅触发监控告警,也极大影响了用户体... 目录问题背景排查步骤1. 日志分析2. 性能工具定位优化方案:提前预热各种资源1. Flowable

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

使用Sentinel自定义返回和实现区分来源方式

《使用Sentinel自定义返回和实现区分来源方式》:本文主要介绍使用Sentinel自定义返回和实现区分来源方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Sentinel自定义返回和实现区分来源1. 自定义错误返回2. 实现区分来源总结Sentinel自定

Linux samba共享慢的原因及解决方案

《Linuxsamba共享慢的原因及解决方案》:本文主要介绍Linuxsamba共享慢的原因及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux samba共享慢原因及解决问题表现原因解决办法总结Linandroidux samba共享慢原因及解决

一文教你如何将maven项目转成web项目

《一文教你如何将maven项目转成web项目》在软件开发过程中,有时我们需要将一个普通的Maven项目转换为Web项目,以便能够部署到Web容器中运行,本文将详细介绍如何通过简单的步骤完成这一转换过程... 目录准备工作步骤一:修改​​pom.XML​​1.1 添加​​packaging​​标签1.2 添加

tomcat多实例部署的项目实践

《tomcat多实例部署的项目实践》Tomcat多实例是指在一台设备上运行多个Tomcat服务,这些Tomcat相互独立,本文主要介绍了tomcat多实例部署的项目实践,具有一定的参考价值,感兴趣的可... 目录1.创建项目目录,测试文China编程件2js.创建实例的安装目录3.准备实例的配置文件4.编辑实例的

SpringBoot启动报错的11个高频问题排查与解决终极指南

《SpringBoot启动报错的11个高频问题排查与解决终极指南》这篇文章主要为大家详细介绍了SpringBoot启动报错的11个高频问题的排查与解决,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一... 目录1. 依赖冲突:NoSuchMethodError 的终极解法2. Bean注入失败:No qu

找不到Anaconda prompt终端的原因分析及解决方案

《找不到Anacondaprompt终端的原因分析及解决方案》因为anaconda还没有初始化,在安装anaconda的过程中,有一行是否要添加anaconda到菜单目录中,由于没有勾选,导致没有菜... 目录问题原因问http://www.chinasem.cn题解决安装了 Anaconda 却找不到 An

Spring定时任务只执行一次的原因分析与解决方案

《Spring定时任务只执行一次的原因分析与解决方案》在使用Spring的@Scheduled定时任务时,你是否遇到过任务只执行一次,后续不再触发的情况?这种情况可能由多种原因导致,如未启用调度、线程... 目录1. 问题背景2. Spring定时任务的基本用法3. 为什么定时任务只执行一次?3.1 未启用

MySQL新增字段后Java实体未更新的潜在问题与解决方案

《MySQL新增字段后Java实体未更新的潜在问题与解决方案》在Java+MySQL的开发中,我们通常使用ORM框架来映射数据库表与Java对象,但有时候,数据库表结构变更(如新增字段)后,开发人员可... 目录引言1. 问题背景:数据库与 Java 实体不同步1.1 常见场景1.2 示例代码2. 不同操作