在Vue3
组合式语法中使用tsx
, 往一个子组件上注册一个 ref
引用,同时又通过展开运算符...
将一个含有值是字符串的ref
属性的 props
传递给子组件,此时子组件上会有2个ref
,我该如何在子组件间中得到props
中的字符串ref
?
代码简单演示:
const nodeRef = ref()const props = { ref:'uuid_xxx', //...any more}//... more codereturn <ChildComp ref="nodeRef" {...props} />
ChildComp
可能是 SFC
也可能是 tsx
组件。
这种设计不友好,但是由于某些原因,目前只能保持现状。
2个 ref
,一个是mounted
后赋值为组件实例,一个是想传递到子组件内部的字符串属性。
目前已经做了尝试,无法在子组件中通过 $attrs
& useAttrs()
获取到透传的字符串 ref
——'uuid_xxx'
,但其实'uuid_xxx'
值已经通过$attrs
的方式挂到 ChildComp
根元素的__id__
attribute上了。
<!-- ChildComp 根元素 --><div __id__="uuid_xxx" ...more />
我希望能保持此种情况下,获取到该字符串ref属性值('uuid_xxx')。
以下是在 Vue 3 的 TSX 中同时注册 ref
并传递字符串 ref
属性到子组件的示例代码:
import { defineComponent, ref } from 'vue';interface Props { refName: string;}const ParentComponent = defineComponent({ setup(props: Props) { const childRef = ref(null); return () => ( <ChildComponent ref={childRef} refName={props.refName} /> ); },});const ChildComponent = defineComponent({ setup(props, { attrs }) { console.log(attrs.refName); // 在这里可以使用传递进来的 refName 属性 return () => <div>Child Component</div>; },});
在上述代码中,在父组件中创建了一个 ref
对象 childRef
,并将其与子组件关联,同时将字符串属性 refName
传递给子组件。在子组件的 setup
函数中,可以通过 attrs
获取到传递进来的属性。
不如在子组件访问父组件的props,不要强求
在 Vue 3 中,当使用 ref
作为属性(prop)和 DOM 引用同时存在于同一个组件上时,确实可能会产生混淆。但是,Vue 提供了明确的方式来区分这两者:ref
用于引用组件实例或 DOM 元素,而 props
用于传递数据到子组件。
在你的场景中,你不能直接将 ref
作为 prop 传递给子组件,因为这会覆盖掉用于获取组件实例的 ref
。但是,你可以使用不同的 prop 名称来传递字符串 ref。
以下是如何在 Vue 3 的 tsx
中同时注册 ref
并传递一个名为 uuid
(或其他你喜欢的名称)的字符串 prop 到子组件的示例:
import { ref, defineComponent } from 'vue'import ChildComp from './ChildComp.vue' // 假设 ChildComp 是一个 Vue 组件export default defineComponent({ setup() { const nodeRef = ref(null) // 使用 ref 来获取子组件实例 const uuid = 'uuid_xxx' // 这是一个普通的 prop 值 // ... more code return () => ( <ChildComp ref={nodeRef} uuid={uuid} {/* ...otherProps */} /> ) }})
在 ChildComp
组件中,你可以通过 props
来访问这个 uuid
prop:
<!-- ChildComp.vue --><template> <div :id="uuid"> <!-- 或者使用其他属性,比如 data-uuid,取决于你的用途 --> <!-- 组件内容 --> </div></template><script lang="ts">import { defineComponent, PropType } from 'vue'export default defineComponent({ props: { uuid: { type: String, required: true } // ...otherProps }, // ...组件逻辑})</script>
注意,在模板中,我们使用 :id
绑定来将 uuid
prop 设置为元素的 id
属性。但你也可以选择其他属性名,比如 data-uuid
,这取决于你的具体需求。
另外,如果你想在 tsx
中直接操作 DOM 属性(例如,通过 ref
访问 DOM 元素并设置属性),你应该使用 DOM 引用而不是组件引用。但是,由于你已经有一个字符串 prop 用于标识,你可能不需要直接操作 DOM,除非有特定的理由。
问题内容: 我正在使用ref为组件编写测试。我想模拟ref元素并更改一些属性,但不知道如何做。有什么建议? 问题答案: 根据https://github.com/airbnb/enzyme/issues/1937中的讨论,这就是解决方案 可以使用非箭头函数对类进行猴子修补,其中“ this”关键字将传递到正确的作用域。
我正在VSCode中使用OpenAPI 3编写一个API文档,扩展为OpenAPI(Swagger)Editor v4.9.1。直到今天它都运行良好-突然我的文档在所有模式声明中充满了“属性”错误。错误是:
父组件动态传递ref给子组件应该怎么写? 父组件调用 子组件 这里我想把父组件传递的ccc动态给子组件,然后操作子组件?
父组件用ref声明一数组 然后循环子组件并把数据传递给子组件 当父组件的数据发生变化时 希望子组件能监听到并响应 目前不知道为何没响应.请教哪里出了问题? 是不是这种业务场景最正规的是不是应该用reactive? 我试了一下 加immediate就可以了 但是我并不想第一次就触发
问题内容: 是否存在通过查询字符串传递数组的标准方法? 需要明确的是,我有一个带有多个值的查询字符串,其中一个是数组值。我希望将该查询字符串值视为一个数组-我不希望该数组爆炸,以使其与其他查询字符串变量没有区别。 编辑: 根据@Alex的答案,没有标准的方法可以执行此操作,因此我的后续工作是什么才是 识别 我正在读取的参数同时是 PHP 和 Javascript 数组的简单方法? 用相同的名称命名
描述 (Description) 如果EXPR或$ _(如果未提供EXPR)是引用,则此函数返回true值。 返回的实际值还定义了引用引用的实体类型。 内置类型是 - REF SCALAR ARRAY HASH CODE GLOB LVALUE IO::Handle 如果变量被bless()函数祝福,那么将返回新的数据类型。 新数据类型通常是类名。 语法 (Syntax) 以下是此函数的简单语法
这用于创建参考值。 创建参考值时,可以选择提供验证器功能,该功能将验证创建的值。 语法 (Syntax) 以下是语法。 (ref x options) Parameters - 'x'是需要提供给参考的值。 “选项”是一组可以提供的选项,例如validate命令。 Return Value - 引用及其对应值。 例子 (Example) 以下程序显示了如何使用它的示例。 (ns clojure.
问题内容: 好的,所以我想将一个非常基本的数组传递到jquery数据attrubute服务器端,如下所示: 然后像这样回撤: 为什么这似乎会警告’[‘而不是’a’(请参阅JSfiddle链接) JSFiddle链接: http : //jsfiddle.net/ktw4v/3/ 问题答案: 它将变量视为字符串,其第零个元素为。 发生这种情况是因为您的字符串不是有效的JSON,它应使用双引号而不是单