tree组件多次请求接口问题
在使用tree组件时,如
登录后复制
子组件中获取选中的id并发送请求。
@check-change="handleclick"const handleclick = async (node: any, ischeck: any) => { if (ischeck) { checkid.value.push(node.id); } else { checkid.value.foreach((item, i) => { if (item === node.id) { checkid.value.splice(i, 1); } }); } emit("nodeclicked", checkid);};
登录后复制
父组件中根据id请求接口。
const nodeclicked = (val: any) => { selectdata.type = val.value.join(","); getdata(selectdata);};
登录后复制
但是,当快速点击tree组件时,会触发多次接口请求。
解决方法
方法一:防抖
// 引入防抖函数,如lodash的debounceimport { debounce } from 'lodash';// 父组件中定义防抖处理的nodeclicked方法const debouncednodeclicked = debounce(nodeclicked, 300); // 延迟时间可以根据需求调整// 修改子组件引用,使用防抖后的回调函数
登录后复制
方法二:延迟处理
// 子组件中引入一个定时器和一个临时变量存储待发送的节点IDlet timer: NodeJS.Timeout | null = null;let pendingNodeIds: any[] = [];const handleClick = async (node: any, isCheck: any) => { if (isCheck) { checkID.value.push(node.id); pendingNodeIds.push(node.id); } else { checkID.value.forEach((item, i) => { if (item === node.id) { checkID.value.splice(i, 1); } }); pendingNodeIds = pendingNodeIds.filter(id => id !== node.id); } clearTimeout(timer); // 清除之前的定时器 timer = setTimeout(() => { // 在延迟时间后触发nodeClicked事件,发送请求 emit("nodeClicked", pendingNodeIds); pendingNodeIds = []; // 重置待发送节点ID列表 }, 300); // 延迟时间可以根据需求调整};
登录后复制
以上就是如何解决 Tree 组件快速点击导致接口多次请求的问题?的详细内容,更多请关注【创想鸟】其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。
发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2653125.html