TreeSelect懒加载数据,使用搜索问题

TreeSelect组件添加showSearch可以进行搜索。
我的接口返回的是name和id,我使用fieldNames对label和value进行了更改,但搜索默认搜索的是label(这样是搜索不到内容的)。

如果使用了fieldNames需要使用treeNodeFilterProp来对应搜索时对那个字段进行搜索(treeNodeFilterProp=“name”,name页面展示的内容)。

因为我使用了懒加载功能,这导致在搜索的时候,搜索到指定内容点击确认,但是再次打开时选中的那个左侧的展开按钮消失,导致后续无法在选择下一级的节点。

TreeSelect懒加载数据,使用搜索问题_第1张图片

导致组件左侧没有展开按钮的原因是因为再次点开下拉框时,TreeSelect组件没有刷新。

再次点开刷新组件有两种方式:
1、使用UUID给TreeSelect组件每次设置不同key,让他每次点开都更新一下组件。

// 生成唯一id
const createUUID = () => {
  let d = new Date().getTime();
  const uuid = 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
    const r = (d + Math.random() * 16) % 16 | 0;
    d = Math.floor(d / 16);
    return (c == 'x' ? r : (r & 0x3) | 0x8).toString(16);
  });
  return uuid;
};
  // tree标识key
  const [uuid, setUuid] = useState(createUUID());

 TreeSelect组件key属性

// TreeSelect组件设置key
 key={uuid}

选中之后需要重新更新UUID的值

// 选中之后调用
const onSelectFun = (id, e) => {
    setTreeExpandedKeys([e.pId])
    setUuid(createUUID());
  };

// TreeSelect组件选中之后属性
onSelect={onSelectFun}

2、设置默认展开的树节点,也可以刷新组件

// 默认展开的值
  const [treeExpandedKeys, setTreeExpandedKeys] = useState([])
// 设置treeDefaultExpandedKeys的值
treeDefaultExpandedKeys={treeExpandedKeys}

每次选中之后更新默认展开的值

const onSelectFun = (id, e) => {
  // id是当前选中的节点的id,e是当前选中的节点的所有信息
  // 这只将默认值设置成父ID是因为如果设置当前选中的id,在下次打开的时候会展开下一级,所以设置父ID这样在下次打开时,保持的是之前打开的层级
  setTreeExpandedKeys([e.pId])
};

// TreeSelect组件选中之后属性
onSelect={onSelectFun}

TreeSelect懒加载数据,使用搜索问题_第2张图片

这样就解决了搜索后,展开按钮丢失,不能在选择下级节点的问题。 

你可能感兴趣的:(antDesign,html,前端,javascript,react)