[解决方案]Antd TreeSelect/Select placeholder失效

🔎嘿,这里是慰慰👩🏻‍🎓,会发各种类型的文章,智能专业,从事前端🐾
🎉如果有帮助的话,就点个赞叭,让我开心一下!🙋🏻‍♀️ ✨也可以关注评论收藏私信⭐️
要是没有回呢,那我大概就在上班,学习,摸鱼…

背景

开发过程中发现antd的treeSelect/Select的placeholder失效
treeselect placeholder失效
以下是一些可能导致 Ant Design 的 TreeSelect/Tree 组件的 placeholder 不显示的原因以及相应的解决方法:

1. value

如果设置了 TreeSelect 的 value 属性,那么 placeholder 不会显示。
于是发现代码逻辑会让value为"“,所以其实placeholder的位置显示的是”",让人误以为它失效了。

// 👇️ value "" ❌wrong
<TreeSelect
placeholder="Select"
value={""} // 设置选中的值
  // 其他属性...
  >
  {/* ... */}
  </TreeSelect>

2. defaultValue

defaultValue和value差不多,如果设置的话就会显示defaultValue,不过他比value优先级低,在同样设置的情况下显示value。

3. 样式覆盖问题

有时自定义的样式可能会影响 Ant Design 组件的显示。确保没有对 TreeSelect/Select 组件或其父级容器应用了隐藏、透明度为零等样式。

4. Ant Design 版本问题

某些版本的 Ant Design 可能存在 bug 或问题。确保您使用的是最新的稳定版本,或者查看是否有与 placeholder 相关的已知问题。

5. 其他问题

如果上述解决方法均不适用,可以检查控制台是否有任何错误或警告信息,以帮助确定问题的原因。

在 Ant Design 的 TreeSelect /Select组件中,如果没有选中任何值,value 属性应该是 undefined。
(注意 null也不行,如果是treeSelect会显示空标签)
这通常是在初始状态或者没有进行任何选择操作时的情况。如果您设置了 value 属性为 undefined,那么 placeholder 会显示在 TreeSelect 组件上,以提醒用户进行选择。

以下是示例代码,展示了如何在 TreeSelect 组件中设置 value 属性为 undefined,以显示 placeholder:

// 👇️ correct ✅ 
import React from 'react';
import { TreeSelect } from 'antd';

const { TreeNode } = TreeSelect;

const treeData = [
  // ... 树状数据
];

const MyTreeSelect = () => {
  const selectedValue = undefined; 

  return (
    <TreeSelect
  showSearch
  style={{ width: '100%' }}
	placeholder="Please select"
	value={selectedValue} // 设置 value 为 undefined
	treeData={treeData}
  />
  );
};

export default MyTreeSelect;

在这个示例中,selectedValue 被设置为 undefined,因此 TreeSelect 组件会显示 placeholder。

题外话:

看了下antd的源码,其实用的是rc-tree-select,如果需要的话可以去看下

一些思考
在解决bug的时候,有的时候并没有发散思维,比如在解决这个问题的时候,更多考虑的是placeholder,然而问题根源是value,记录一下,以后提醒自己

推荐阅读:

▶K均值聚类 k-means 对表内数据进行聚类,结果输出散点图

▶[CSS]超详细解决方案:z-index的值很大却在下面?

▶《机器学习实战》 Logistic回归预测患有疝气病的马的存活问题

参考链接
  • Antd:https://4x.ant.design/components/tree-select-cn/#header
  • rc-tree-select :https://www.npmjs.com/package/rc-tree-select?activeTab=code
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
antdTreeSelect 组件提供了一个 `filterTreeNode` 属性用于搜索,可以设置为一个函数,用于自定义节点的搜索规则。 具体用法可以参考下面的代码示例: ```jsx import React, { useState } from 'react'; import { TreeSelect } from 'antd'; const { TreeNode } = TreeSelect; const treeData = [ { title: 'Node1', value: '0-0', key: '0-0', children: [ { title: 'Child Node1', value: '0-0-0', key: '0-0-0', }, { title: 'Child Node2', value: '0-0-1', key: '0-0-1', }, ], }, { title: 'Node2', value: '0-1', key: '0-1', }, ]; const filterTreeNode = (inputValue, treeNode) => { return treeNode.title.includes(inputValue); }; const SearchableTreeSelect = () => { const [value, setValue] = useState(undefined); const onChange = (newValue) => { setValue(newValue); }; return ( <TreeSelect showSearch value={value} dropdownStyle={{ maxHeight: 400, overflow: 'auto' }} placeholder="Please select" allowClear treeDefaultExpandAll filterTreeNode={filterTreeNode} onChange={onChange} > {treeData.map((treeNode) => ( <TreeNode {...treeNode} /> ))} </TreeSelect> ); }; export default SearchableTreeSelect; ``` 在上面的示例中,我们定义了一个名为 `filterTreeNode` 的函数,用于自定义节点的搜索规则。在函数中,我们判断节点的 `title` 属性是否包含搜索关键字,如果包含则返回 `true`,否则返回 `false`。 然后,在 `TreeSelect` 组件中,我们将 `filterTreeNode` 属性设置为刚刚定义的函数即可。这样,在搜索框中输入关键字时,只有节点的 `title` 属性包含该关键字的节点才会被显示

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值