React给antd中TreeSelect组件左侧加自定义图标icon

简介: 本文介绍了如何在React中为Ant Design的TreeSelect组件的每个树节点添加自定义图标,并解决了因缺少key属性而导致的警告问题,展示了如何通过递归函数处理treeData数据并为每个节点添加图标。

很多时候官网并没有给我们过多地详解来解释他们的产品怎么使用。
今天碰到了一个很恶心的问题,就是在给antd的treeSelect组件加左侧icon的时候,总是报一个警告,

Warning: Each child in a list should have a unique “key” prop.

告诉我们每一个节点都需要有一个唯一的key。

首先我这里简单的封装了一下treeSelect这个组件:

import React from 'react';
import {
    TreeSelect } from 'antd';
import 'antd/dist/antd.css';
import '../styles/rstreeselect.less';


class RSTreeSelect extends React.PureComponent {
   
    constructor(props) {
   
        super(props);
        this.state = {
   }
    }
    static defaultProps = {
   
        title: "",
        treeData: [],
    }
    render() {
   
        let {
    title, treeData, ...rest } = this.props;
        return (
            <div className="rsselect">
                {
   title && <p className="rsselect-title">{
   title}</p>}
                {
   <TreeSelect
                    treeData={
   treeData}
                    {
   ...rest}>
                </TreeSelect>}
            </div>
        )
    }
}

export default RSTreeSelect;

然后页面使用:

import RSTreeSelect from '../../component/RSTreeSelect';
import {
    FolderOpenOutlined, CarryOutOutlined } from '@ant-design/icons';

        const treeData = [
            {
   
                title: 'Node1',
                value: '1',
                disabled: true,
                children: [
                    {
   
                        title: 'Child Node1',
                        disabled: true,
                        value: '1-1',

                    },
                    {
   
                        title: 'Child Node2',
                        value: '1-2',
                        children: ''
                    },
                    {
   
                        title: 'Child Node2',
                        value: '1-22',
                        children: ''
                    },
                    {
   
                        title: 'Child Node2',
                        value: '1-233',
                        children: ''
                    },
                ],
            },
            {
   
                title: 'Node2',
                value: '2',
                children: '',
            },
        ];

    在render函数中的dom:

        <RSTreeSelect
              title={
   '选择文件'}
              value={
   this.state[`${
     item.keyName}`]}
              dropdownStyle={
   {
    maxHeight: 400, overflow: 'auto' }}
              treeData={
   this.treeData(treeData)}
              // treeData={item.keyAndValueList === '' || item.keyAndValueList === null ? [] : this.treeData(JSON.parse(item.keyAndValueList))}
              placeholder="请选择文件"
              treeIcon={
   true}
              onChange={
   (e) => {
    this.inputName(`${
     item.keyName}`, e) }}
              suffixIcon={
   <FolderOpenOutlined />}
        />

仔treeData渲染文件夹数组之前调用了函数处理了数据结构

 treeData = (data) => data.map(item => {
   
        if (item.children) {
   
            item['icon'] = [<FolderOpenOutlined />]
            this.treeData(item.children)
        } else {
   
            item['icon'] = [<CarryOutOutlined/>]
        }
        return item
    })

这个时候就会报错,绞尽脑汁找到原因,原来引入的antd图标组件没有加key

正确的:

    treeData = (data) => data.map(item => {
   
        if (item.children) {
   
            item['icon'] = [<FolderOpenOutlined key={
   item.title}/>]
            this.treeData(item.children)
        } else {
   
            item['icon'] = [<CarryOutOutlined key={
   item.title}/>]
        }
        return item
    })

函数的作用就是递归自己给对象加icon属性。最重要的是对数据进行处理,我这里遇到一个小坑 key,记录一下。

在这里插入图片描述

可以按照自己的喜好体检icon喽

目录
相关文章
|
3月前
|
数据采集 前端开发 API
React - 实现一个基于 Antd 的数值范围组件
这篇文章介绍了如何实现一个基于Ant Design的数值范围组件,以满足数据采集流程中表单数据的录入需求。文章详细说明了组件的设计思路、代码结构、使用方式以及参数说明,并提供了效果预览和注意事项。组件支持只能输入数字,具有自定义表单控件封装的特点,同时支持所有InputNumber属性,以适应不同业务场景的需求。
113 0
React - 实现一个基于 Antd 的数值范围组件
|
1月前
|
缓存 前端开发 JavaScript
React Hooks深度解析与最佳实践:提升函数组件能力的终极指南
🌟蒋星熠Jaxonic,前端探索者。专注React Hooks深度实践,从原理到实战,分享状态管理、性能优化与自定义Hook精髓。助力开发者掌握函数组件的无限可能,共赴技术星辰大海!
React Hooks深度解析与最佳实践:提升函数组件能力的终极指南
|
2月前
|
编解码 前端开发 JavaScript
js react antd 实现页面低分变率和高分变率下字体大小自适用,主要是配置antd
在React中结合Ant Design与媒体查询,通过less变量和响应式断点动态调整`@font-size-base`,实现多分辨率下字体自适应,提升跨设备体验。
131 2
|
3月前
|
前端开发 安全 数据安全/隐私保护
React - 实现一个基于 Antd 的密码强度校验组件
这篇文章介绍了一个基于 Nest 和 Umi 技术栈的个人项目开发中用到的密码强度校验组件的开发过程。作者首先在网上找不到满意的资料,于是决定自己开发该组件。文章依次介绍了效果预览、组件思想和组件开发的过程,并提供了相应的代码示例。最后,作者展示了实际效果,并提供了仓库地址供参考。
111 0
React - 实现一个基于 Antd 的密码强度校验组件
|
6月前
|
缓存 前端开发 数据安全/隐私保护
如何使用组合组件和高阶组件实现复杂的 React 应用程序?
如何使用组合组件和高阶组件实现复杂的 React 应用程序?
275 68
|
6月前
|
缓存 前端开发 Java
在 React 中,组合组件和高阶组件在性能方面有何区别?
在 React 中,组合组件和高阶组件在性能方面有何区别?
254 67
|
6月前
|
前端开发 JavaScript 安全
除了高阶组件和render props,还有哪些在 React 中实现代码复用的方法?
除了高阶组件和render props,还有哪些在 React 中实现代码复用的方法?
288 62
|
8月前
|
移动开发 前端开发 JavaScript
React音频播放列表组件:常见问题、易错点与解决方案
本文介绍了在React中实现音频播放列表时常见的挑战及解决方案。通过基础实现、常见问题分析和最佳实践,帮助开发者避免状态管理、生命周期控制和事件处理中的陷阱。关键点包括使用`useRef`操作音频元素、`useState`同步播放状态、全局状态管理防止多音频同时播放、以及通过`useEffect`清理资源。还提供了代码示例和跨浏览器兼容性处理方法,确保高效实现功能并减少调试时间。
301 30
|
8月前
|
编解码 前端开发 开发者
React 图片组件样式自定义:常见问题与解决方案
在 React 开发中,图片组件的样式自定义常因细节问题导致布局错乱、性能损耗或交互异常。本文系统梳理常见问题及解决方案,涵盖基础样式应用、响应式设计、加载状态与性能优化等,结合代码案例帮助开发者高效实现图片组件的样式控制。重点解决图片尺寸不匹配、边框阴影不一致、移动端显示模糊、加载失败处理及懒加载等问题,并总结易错点和最佳实践,助力开发者提升开发效率和用户体验。
281 22
|
8月前
|
Web App开发 移动开发 前端开发
React 视频播放器样式自定义实战指南
本文详细介绍了如何在React项目中实现视频播放器的样式自定义,涵盖HTML5 `&lt;video&gt;`标签的基础知识、CSS样式定制技巧及常见问题解决方案。针对全屏模式样式失效、移动端触摸事件冲突和进度条样式定制等问题提供了具体代码示例。同时,探讨了视频预加载策略和内存优化方法,并推荐了几款调试工具,帮助开发者提升用户体验和应用性能。
282 6