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

vue3项目实践心得-多次渲染同一svg + 理解v-if、transition、dom加载之间的顺序

🧡🧡需求🧡🧡

未点击查看答案按钮时,步骤3面板未展示内容(v-if控制)
在这里插入图片描述

点击查看答案按钮后,通过graphviz绘制并展示状态转换图,渲染在步骤2中,同时步骤3的v-if变为true,渲染出内容并且也渲染展示这张图
在这里插入图片描述

🧡🧡遇到的问题🧡🧡

  • 渲染重复性:前端通过vue-graphviz库 使用svg渲染 后端传来的dot_str,从而绘制出这张svg状态转换图,问题出现在项目中需要展示两个同样svg,由于它们的id相同,根据共享原则,导致只渲染了一个
  • 渲染时机:涉及v-if、transition、添加dom节点的操作,时机不对导致步骤3的svg图渲染不出来

🧡🧡解决思路🧡🧡

  • 对于渲染重复性问题:利用cloneNode函数,复制一个新的svg,从而添加dom节点
	 const svg = viz.renderSVGElement(draw_dot['NFA'][0])const svgClone = svg.cloneNode(true)NFAs.value[0].appendChild(svg)NFAs.value[1].appendChild(svgClone)
  • 对于渲染时机:掌握vue3 transition文档中描述的enter钩子,应当确保v-if渲染后的dom生成后,再调用渲染函数(添加svg dom),之后再开始进行transiton过渡
    在这里插入图片描述
const handleStep3_TransEnter = (el:Element, done:()=>void) => {// console.log(NFAs.value)// console.log('step333333333333333333')if(!step3_open.value) return done()// console.log(222)// 此时元素已插入 DOMnextTick().then(() => {// console.log(NFAs.value)// 确保 ref 已收集if (NFAs.value.length >= 2) {instance().then(viz => {const svg = viz.renderSVGElement(draw_dot['NFA'][0])const svgClone = svg.cloneNode(true)NFAs.value[0].appendChild(svg)NFAs.value[1].appendChild(svgClone)draw_dot['NFA'][1] = true})}})
}
http://www.lryc.cn/news/538745.html

相关文章:

  • 【实战项目】BP神经网络识别人脸朝向----MATLAB实现
  • java数据结构_二叉树_5.5
  • Deepseek-R1推理模型API接入调用指南 ChatGPT Web Midjourney Proxy 开源项目接入Deepseek教程
  • 计算机网络(4)TCP断开
  • 科技云报到:科技普惠潮流渐起,“开源”将带我们走向何方?
  • 【论文笔记】On Generative Agents in Recommendation
  • 使用 Spring Boot 和 Canal 实现 MySQL 数据库同步
  • vue3 在element-plus表格使用render-header
  • 算法——结合实例了解Minimax算法(极小化极大算法)
  • 使用 DeepSeek 生成商城流程图
  • 什么是GraphQL?
  • Spring Boot 的约定优于配置,你的理解是什么?
  • C#开源大型商城系统之B2B2C+O2O一体化_OctShop
  • gitte远程仓库修改后,本地没有更新,本地与远程仓库不一致
  • 【对比】Pandas 和 Polars 的区别
  • el-input无法输入0.0001的小数,自动转换为0在vue3中的bug
  • Ubuntu 下 systemd 介绍
  • BERT文本分类(PyTorch和Transformers)畅用七个模型架构
  • 两步在 Vite 中配置 Tailwindcss
  • 【vmware虚拟机安装教程】
  • 文字转语音(三)FreeTTS实现
  • string类详解(上)
  • Visual Studio Code使用ai大模型编成
  • 外贸跨境订货系统流程设计、功能列表及源码输出
  • TraeAi上手体验
  • 深入解析 vLLM:高性能 LLM 服务框架的架构之美(一)原理与解析
  • thingboard告警信息格式美化
  • redis解决高并发看门狗策略
  • Python函数的函数名250217
  • Unity 获取独立显卡数量