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

本文介绍如何解决在Ant Design的TreeSelect组件中添加图标时出现的警告问题,通过为每个图标元素添加唯一key属性,成功消除了警告,并实现了自定义图标的显示。

很多时候官网并没有给我们过多地详解来解释他们的产品怎么使用。
今天碰到了一个很恶心的问题,就是在给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喽

<think>我们正在使用React、TypeScript和Ant Design5.24,需要自定义时间组件的国际化设置。 AntDesign5.x版本使用dayjs作为日期库,因此国际化设置主要围绕dayjs进行。步骤:1.安装dayjs以及所需的语言包。2.在应用中配置dayjs的语言环境。3.配置AntDesign的国际化(ConfigProvider)以使用对应的语言包。注意:Ant Design5.24默认使用英语,如果要切换为其他语言,我们需要同时设置dayjs和Ant Design的ConfigProvider。示例:切换为简体中文。首先,确保已经安装dayjsantd:npm installdayjsantd然后,安装中文语言包:npm installdayjs/locale/zh-cn在应用入口(如App.tsx)中:import Reactfrom'react';import dayjs from'dayjs';import'dayjs/locale/zh-cn'; //导入中文语言包import{ ConfigProvider }from 'antd';import zhCN from'antd/locale/zh_CN';//设置dayjs的全局语言环境dayjs.locale('zh-cn');constApp:React.FC= ()=> {return(<ConfigProviderlocale={zhCN}>{/*你的应用组件 */}</ConfigProvider>);};如果要自定义时间组件的显示格式(例如日期格式),可以在使用日期组件时通过format属性设置,或者通过ConfigProvider的locale属性设置全局格式。例如,全局设置日期格式:const zhCN ={...zhCN,//从antd导入的zh_CNDatePicker:{...zhCN.DatePicker,lang: {...zhCN.DatePicker?.lang,//这里可以覆盖默认的日期格式format: 'YYYY年MM月DD日',},},};但是,更常见的做法是在使用组件时指定format,例如:<DatePickerformat="YYYY年MM月DD日" />如果用户需要自定义其他语言(比如公司内部的自定义语言),可以按照以下步骤:1.创建一个自定义的dayjs语言包(如果需要修改日期相关词汇)。2.创建一个自定义AntDesign语言包(参考antd提供的语言包结构)。3.按照上述方式设置。注意:AntDesign的语言包是一个对象,包含所有组件的文本。我们可以只覆盖其中一部分。例如,自定义时间组件中的月份名称:const customLocale ={...zhCN,//基于中文DatePicker: {...zhCN.DatePicker,lang:{...zhCN.DatePicker.lang,shortMonths:['1月','2月','3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'],},},};然后在ConfigProvider中设置locale={customLocale}。总结:-设置dayjs的语言环境。-通过ConfigProvider设置AntDesign的语言包(locale)。-如果需要自定义格式,可以在组件上直接设置,或者通过修改语言包来实现全局设置。参考文档:-Ant Design国际化:https://ant.design/docs/react/i18n-cn- dayjs国际化:https://day.js.org/docs/en/i18n/changing-locale注意:Ant Design5.24的locale包路径为:antd/locale/语言代码,例如中文为zh_CN,英文为en_US。示例代码(TypeScript):</think>### React TypeScript Ant Design 5.24 时间组件国际化设置 在 Ant Design 5.24 中,时间组件(如 `DatePicker`)的国际化主要通过以下步骤实现: #### 1. **安装依赖** ```bash npm install dayjs # Ant Design 5.x 使用 dayjs 替代 moment ``` #### 2. **配置语言环境** 在应用入口文件(如 `App.tsx`)中: ```typescript import React from 'react'; import { ConfigProvider } from 'antd'; import zhCN from 'antd/locale/zh_CN'; // 中文语言包 import 'dayjs/locale/zh-cn'; // dayjs 中文支持 function App() { return ( <ConfigProvider locale={zhCN} // 设置全局语言 theme={{ token: { borderRadius: 4 } }} > {/* 你的应用组件 */} </ConfigProvider> ); } ``` #### 3. **自定义日期格式** 在组件中覆盖默认格式: ```typescript import { DatePicker } from 'antd'; const CustomPicker = () => ( <DatePicker format="YYYY年MM月DD日" // 自定义格式 placeholder="选择日期" /> ); ``` #### 4. **高级自定义(覆盖语言包)** 创建自定义语言包对象: ```typescript const customZhCN = { ...zhCN, DatePicker: { ...zhCN.DatePicker, lang: { ...zhCN.DatePicker?.lang, shortWeekDays: ['日', '一', '二', '三', '四', '五', '六'], // 自定义星期缩写 placeholder: '请选择日期', // 自定义提示文本 }, }, }; // 在 ConfigProvider 中使用 <ConfigProvider locale={customZhCN}> ``` #### 5. **动态切换语言** ```typescript import enUS from 'antd/locale/en_US'; import 'dayjs/locale/en'; const LanguageSwitcher = () => { const [locale, setLocale] = React.useState(zhCN); const switchLanguage = (lang: string) => { setLocale(lang === 'zh' ? zhCN : enUS); dayjs.locale(lang === 'zh' ? 'zh-cn' : 'en'); }; return ( <ConfigProvider locale={locale}> <Button onClick={() => switchLanguage('en')}>English</Button> <DatePicker /> </ConfigProvider> ); }; ``` #### 关键注意事项: 1. **dayjs 依赖**:Ant Design 5.24 使用 dayjs 处理日期,需同时配置 dayjs 语言包 2. **全局配置**:通过 `ConfigProvider` 实现全局国际化 3. **组件级覆盖**:单个组件可通过 `locale` 属性覆盖全局设置 4. **TypeScript 类型**:自定义语言包时使用 `as Locale` 避免类型错误 > 国际化配置依赖于 dayjsantd 的语言包协同工作,需确保两者语言设置一致[^1]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

六卿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值