Ant Design 基于dropdownRender属性对下拉菜单的封装

该博客展示了如何在React应用中使用Ant Design的Select组件来实现具有多级子菜单的选择功能。代码详细解释了如何初始化数据的勾选状态、处理数据变化以及更新选项的勾选状态。同时,文章提供了使用示例,说明了如何处理数据映射和传递给Select组件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import React, { useEffect, useState } from "react";
import { Select ,Checkbox,Menu } from "antd";
import _ from 'lodash';
import { nanoid } from "nanoid";

const MemuSelectSimple = props => {
  const {data, dataOptions,dataOptionsMap,onChange} = props 
  const [options,setOptions]  = useState([])

// 用于初始化数据勾选状态
const optionsChange = (data,options) => {
    const tempOptions = _.cloneDeep(options)
    const resOptions = tempOptions.map(item=>{
        if(data.includes(item.value)){
           item.checked = true
        }
        let count = 0
        item.children?.map(subItem=>{
            if(data.includes(subItem.value)){
               subItem.checked= true
               count ++
            }
            return subItem
        })
        if(item.children && item.children.length){
           if(!count){
               item.checked=false
               item.indeterminate=false
           }else if (item.children.length===count){
               item.checked=true
               item.indeterminate=false
           }else{
               item.checked=false
               item.indeterminate=true
           }
        }
       return item
    })
    return resOptions
}



useEffect(()=>{
    const tempOptions = optionsChange(data,dataOptions)
    setOptions(tempOptions)
},[])

useEffect(()=>{
    console.log('data',data);
},[data])

 const handleChange = option => {
     // 全部清空 []
     if(!option.length){
        onChange([])
        setOptions(dataOptions)
        return
     }
     // 部分清空
     const optionsMapKeys = Object.keys(dataOptionsMap).map(item=>+item)
     const optionsMapValues = Object.values(dataOptionsMap)
     let optionsValue = []
     optionsMapValues.forEach((item,index)=>{
        if(option.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值