当前位置: 首页 > news >正文

naive ui tree 默认选中不生效

如果很急,直接看总结!!

先看文档

naive ui 文档

默认选中

从文档中我们看到有默认选中key的属性,于是尝试如下:

<template><n-tree block-line ref="treeRef"expand-on-click cascadecheckable:data="data":default-checked-keys="['4030', '4032']"/></template><script setup lang="ts">importtype{TreeOption}from'naive-ui'import{repeat}from'seemly'import{nextTick,onMounted,ref}from'vue'functioncreateData(level=4,baseKey=''):TreeOption[]|undefined{if(!level)returnundefined;returnrepeat(6-level,undefined).map((_,index)=>{constkey=`${baseKey}${level}${index}`return{label:createLabel(level),key,children:createData(level-1,key)}})}functioncreateLabel(level:number):string{if(level===4)return'道生一'if(level===3)return'一生二'if(level===2)return'二生三'if(level===1)return'三生万物'return''}constdata=createData();</script>

问题复现,默认选中在异步过程中失效

现在模拟异步获取数据并回显选中情况,代码如下:

<template><n-tree block-line ref="treeRef"expand-on-click cascadecheckable:data="data":default-checked-keys="defaultCheckedKeys"/></template><script setup lang="ts">importtype{TreeOption}from'naive-ui'import{repeat}from'seemly'import{nextTick,onMounted,ref}from'vue'functioncreateData(level=4,baseKey=''):TreeOption[]|undefined{if(!level)returnundefined;returnrepeat(6-level,undefined).map((_,index)=>{constkey=`${baseKey}${level}${index}`return{label:createLabel(level),key,children:createData(level-1,key)}})}functioncreateLabel(level:number):string{if(level===4)return'道生一'if(level===3)return'一生二'if(level===2)return'二生三'if(level===1)return'三生万物'return''}constdata=createData();consttreeRef=ref<string[]>([]);letdefaultCheckedKeys=ref<string[]>([]);onMounted(()=>{setTimeout(()=>{defaultCheckedKeys.value=['4030','4032'];// 很遗憾,naive ui 的 tree 组件并没提供像 setCheckedKeys 这样的函数!!// treeRef.value && treeRef.setCheckedKeys(['4030', '4032']);})})</script>


很遗憾,naive ui 的 tree 组件并没提供像 setCheckedKeys 这样的函数!!

解决方案

既然默认选中的属性怎么尝试都是没用的,这里我们换另一个属性:checked-keys

尝试如下:

<template><n-tree block-line expand-on-click cascade checkable:data="data":checked-keys="defaultCheckedKeys":on-update:checked-keys="updateCheckedKeys"/></template><script setup lang="ts">importtype{TreeOption}from'naive-ui'import{repeat}from'seemly'import{nextTick,onMounted,ref}from'vue'functioncreateData(level=4,baseKey=''):TreeOption[]|undefined{if(!level)returnundefinedreturnrepeat(6-level,undefined).map((_,index)=>{constkey=`${baseKey}${level}${index}`return{label:createLabel(level),key,children:createData(level-1,key)}})}functioncreateLabel(level:number):string{if(level===4)return'道生一'if(level===3)return'一生二'if(level===2)return'二生三'if(level===1)return'三生万物'return''}constdata=createData();letdefaultCheckedKeys=ref<string[]>([]);constupdateCheckedKeys=(a:string[],b:TreeOption[])=>{defaultCheckedKeys.value=a;}onMounted(()=>{console.log(data)setTimeout(()=>{defaultCheckedKeys.value=['4030','4032'];})})</script>


细心的开发者在尝试的时候会注意到,如果只给定 :checked-keys="defaultCheckedKeys" ,会发现,在点击勾选时,选中功能也失效了! 所以重中之重,还需要配合 on-update:checked-keys 属性,去监听选中的keys并动态赋值!!

总结

至此,naive ui tree 组件异步默认选中的问题就解决了,将正常逻辑下文档指引的default-checked-keys,替换成checked-keys进而绑定选中的keys,结合on-update:checked-keys监听选中状态,对选中的keys进行同步赋值。

<template><n-tree block-line expand-on-click cascade checkable:data="你的数据":checked-keys="defaultCheckedKeys":on-update:checked-keys="updateCheckedKeys"/></template>
letdefaultCheckedKeys=ref<string[]>([]);constupdateCheckedKeys=(a:string[],b:TreeOption[])=>{defaultCheckedKeys.value=a;}
http://www.jsqmd.com/news/906738/

相关文章:

  • 电源箱厂家排行:深圳哪家最靠谱?
  • Cortex-M跟踪源无ATBYTES信号连接CoreSight系统方案
  • 提升JAVA从业者工作效率的Claude Code使用技巧
  • RAG 文档切片实战:国标知识库篇(一)——基础切片
  • 告别Edge兼容模式!Win11里找回那个熟悉的IE图标,搞定老旧系统登录
  • CoreSight ELA-600跟踪数据溢出优化方案
  • 从零到一:如何用chanvis搭建你的专属缠论量化分析系统
  • 车辆线性二,三,四自由度汽车动力学模型稳定性对比仿真【附说明文档】
  • 从傅里叶到希尔伯特黄变换:时间序列分析‘三巨头’怎么选?附Python代码对比
  • 【机器人协同】基于matlab多机器人路径跟踪与UWB IMU传感器模拟平台多小车协同运动仿真【含Matlab源码 15571期】
  • 【石油】基于matlab风化导致的石油有机碳和青藏高原净地质碳收支【含Matlab源码 15573期】
  • 2026 北京 GEO 优化服务商合作参考:客户评价与合规要求深度解析 - 玖叁鹿
  • 读懂JBoltAI智能问数升级:企业AI用数,瓶颈不是模型
  • 跨境直播拍卖高并发场景下的网络稳定性技术实践
  • 别再只算相关系数了!用Python做皮尔逊相关分析,这3个显著性检验的坑你踩过吗?
  • 用LangGraph构建支持“暂停与人工介入”的长周期任务工作流
  • Steam创意工坊模组自由获取指南:无需Steam客户端,轻松下载1000+游戏模组
  • C166架构中DPP寄存器的安全使用与性能优化
  • ST LIS3DHTR代理商
  • Windows 11 dwm.exe内存占用高?可能是Intel核显驱动的锅(附戴尔/灵越5570实测)
  • 奇迹 MU:剑与翼 打宝玩法与自由交易体系详解 官方下载开启
  • 2026年现阶段武汉全屋定制指南:聚焦高还原度靠谱施工队的选择逻辑 - 2026年企业资讯
  • 雾化器语音提示芯片方案:便携电池供电+低功耗WT588F02-8S-C
  • 告别批量计算:用Python手把手实现RLS算法,处理实时数据流(附完整代码)
  • 92%核价准确率!苏州同铄CostAI软件发布,对标国际水准重塑成本核算
  • 2026年5款AI电商设计工具实测:618电商海报/主图/详情页全套物料制作
  • 2026-05-29:二进制中恰好K个1的第N小整数。用go语言,给定两个正整数 n 和 k,要求你找到这样一个数:在它的二进制表示中,恰好有 k 个比特位为 1。把所有满足条件的正整数按大小从小到大
  • 【26年】考研数学一、二、三历年真题及答案解析PDF电子版(1987-2026年)
  • Ctx2Skill: 从上下文到技能的自进化框架
  • 2026年四川区域高性价比挡墙钢模板生产供应企业全面梳理与产业分析 - 博客湾