当前位置: 首页 > 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.rkmt.cn/news/1418041.html

相关文章:

  • Cortex-M跟踪源无ATBYTES信号连接CoreSight系统方案
  • 【机器人协同】基于matlab多机器人路径跟踪与UWB IMU传感器模拟平台多小车协同运动仿真【含Matlab源码 15571期】
  • 从傅里叶到希尔伯特黄变换:时间序列分析‘三巨头’怎么选?附Python代码对比
  • 别再只算相关系数了!用Python做皮尔逊相关分析,这3个显著性检验的坑你踩过吗?
  • C166架构中DPP寄存器的安全使用与性能优化
  • 奇迹 MU:剑与翼 打宝玩法与自由交易体系详解 官方下载开启
  • 2026年现阶段武汉全屋定制指南:聚焦高还原度靠谱施工队的选择逻辑 - 2026年企业资讯
  • 2026-05-29:二进制中恰好K个1的第N小整数。用go语言,给定两个正整数 n 和 k,要求你找到这样一个数:在它的二进制表示中,恰好有 k 个比特位为 1。把所有满足条件的正整数按大小从小到大
  • 【26年】考研数学一、二、三历年真题及答案解析PDF电子版(1987-2026年)
  • Ctx2Skill: 从上下文到技能的自进化框架
  • AI原生运维操作系统:从数据孤岛到智能自治的SRE实践
  • IPD咨询洞察:一款产品从0到上市,IPD是怎么管的?
  • 基于Jenkins自动打包并部署Tomcat环境
  • 别再凭感觉选K了!用Python实战肘部法与轮廓系数法,5分钟找到K-means最佳聚类数
  • 校招效果差?配对指数是关键
  • 【ChatGPT会议纪要整理黄金法则】:20年IT专家亲授5步自动化提效法,准确率提升92%(附Prompt模板库)
  • 图像缩放需要哪些参数和端口
  • TMSpeech:3倍提升效率的Windows实时语音转文字工具
  • 【Android】原生代码查看网址
  • 数字电子技术判奇判偶连线图
  • OSPF 基础全解:从原理到三大厂商实战配置,一篇搞定
  • 保姆级教程:手把手教你为Ubuntu 22.04 LTS自定义屏幕分辨率(解决Unknown display)
  • 基于 SQLAlchemy 的面试语音数据库层设计与封装实战
  • 71_《智能体微服务架构企业级实战教程》复盘与扩展之项目代码复盘
  • 告别低效 Prompt 复用,AI 技能化才是当下主流玩法
  • 从游戏开发到数据可视化:解锁Blender Python API的5个实用场景(含代码片段)
  • 2026年实用降AI率工具:实测AI率从90%降至4%的省心方案
  • 别再死磕RNN训练了!用Python快速上手ESN(回声状态网络)实战
  • 求大神帮我看看这个代码有什么问题吗
  • 2026年5月天津装修设计获客机构哪家好?优质厂家推荐与选择指南 - 海棠依旧大