<span :="refApi">区域</span><span ref="ref1">位置</span><span :="{ ref: 'ref2' }">操作</span>const ref1 = ref();const ref2 = ref();const ref3 = ref();const refApi = { ref: 'ref3'};console.log(ref1, ref2, ref3);
在开发环境下 ref1, ref2, ref3
皆符合预期指向 span
。
但是打包后的生产环境就只有 ref1
正常指向 span
, ref2, ref3
皆为 undefined
。
为什么表现不一致?
从问题和不同编译环境差异两个角度回答
按我的印象中,不论是 v-bind
还是其缩写 :
都需要对应一个属性吧(还是最新的版本发生了变化?)
如果题主是期望实现动态属性,那也应该这么做:
<span :[key]="refApi"></span>
而不是
<span :="refApi"></span>
而且根据官方文档的描述,ref
理论取值就只有 string | Function
所以理论正确的写法应该是
<template> <span :ref="refApi">区域</span> <span ref="ref1">位置</span></template><script>import { ref, onMounted } from 'vue'const ref1 = ref();const ref2 = ref();const refApi = (e) => { ref2.value = e};// 针对 ref 的操作建议在挂载后访问onMounted(() => { console.log(ref1.value, ref2.value);})</script>
至于为什么会出现开发环境能够正常捕获到,但是生产环境失败,个人认为是生产环境下,脚手架或编译工具进行了优化导致的,具体原因恐怕得发个 issue
问官方团队了(如果后续有蹲到具体的产生原因,也可以 @
我一下)
总之,上方的写法是符合规范的,能够保证编译后在生产环境也正常运行
vue官方文档中关于ref属性的描述
vue官方discord (discord看运气,偶尔不挂梯也能访问)
vue github discussions
vue github issue
在 Vue 3 中,ref
是一个函数,它返回一个响应式引用。这个引用的值是你在调用 ref
函数时传入的参数。在你的代码中,ref1
,ref2
和 ref3
都被初始化为对 span
元素的引用。
但是,当你尝试将 ref
作为一个对象的属性时(如 refApi
),情况就有些不同了。在这种情况下,refApi.ref
是一个字符串,而不是一个对 span
元素的引用。因此,当你尝试访问 refApi.ref
时,你实际上得到的是一个字符串,而不是一个对 span
元素的引用。
所以,当你试图打印 ref1
,ref2
和 ref3
时,你实际上是在打印对 span
元素的引用。在开发环境中,这些引用是有效的,因为你的代码正在运行时,这些元素是存在的。但在生产环境中,由于代码已经被打包和优化,这些引用可能已经失效了,因为元素可能已经被移除或更改了。
这就是为什么在生产环境中,你只能看到 ref1
是有效的,而 ref2
和 ref3
都是 undefined
的原因。
我有一个Selenium测试,它是在Spock框架的帮助下执行的。一般来说,它是这样的: null
问题内容: 我目前在“开发”框中安装了Jenkins实例。这样可以很好地构建并且可以毫无问题地部署到我们的开发环境中。 在构建过程中,我的项目使用了一个包含诸如数据库连接URL之类的详细信息的属性文件(诸如此类的详细信息显然会因我所指向的环境而异)。 我想知道的是配置项目的最佳方法是什么,以便当我想将Jenkins构建的WAR文件发布到Production中时,它包含Production属性而不是
我正在使用带有JPA的Spring Boot与数据库连接。我需要在实体上的@table注释中设置“catalog”属性。 有没有人知道其他的方法,比如application.properties文件,而不是硬编码的字符串,来改变它? 如果有任何解决办法,我将不胜感激。
当我尝试获取字符串tempdir=System时。getProperty(“java.io.tmpdir”);它将返回我的操作系统“temp”目录路径。e、 普通java应用程序中的g.C:\Users\DATAGU~1\AppData\Local\Temp\。这是正确的。 但是,当我尝试在部署在tomcat6上的web应用程序上获取相同的属性时,它会返回tomcat temp目录路径(例如D:\
我正在使用一个具有不同测试环境(test、QA、UAT、PROD)Spring boot应用程序的关键云代工,我创建了多个属性文件(每个指向不同的数据库),如 或者,当我转移到更高的环境时,我需要改变吗? 提前道谢。
A Zen student went up to a hot dog vendor and said: "Make me one with everything". — Joke 环境背景很重要。 如果你想对 Puppet 的配置清单在应用到生产环境之前先进行测试, 你可以使用 Puppet 的 environment 特性来做到。 这可以让你根据环境应用不同的配置清单来设置客户机。例如,你可以定