vue.js - 如何判断一个 prop 是否已显式传递给 Vue 3 中的组件
问题描述
有没有办法从 Vue 3 组件中得知哪些 props 被显式传入(即,作为父模板中组件标签上的属性)——而不是未设置并从默认值接收它们的值?
换句话说,如果我有一个使用默认值声明的道具,如下所示:
props: {
name: {
type: String,
default: 'Friend'
}
}
我如何分辨这之间的区别:
<Greeting name="Friend" />
和这个:
<Greeting /> <!-- name defaults to 'Friend' -->
在这两种情况下,组件的name
prop 将具有相同的值,在第一种情况下被显式传递,在第二种情况下被分配默认值。
Vue 3 中是否有系统的方法来确定差异?
在 Vue 2 中,您可以使用this.$options.propsData
它——它只包含直接传入的属性。但是,它在 Vue 3 中已被删除。
解决方案
此信息可能在具有getCurrentInstance
低级 API 的组件实例中可用,但没有记录的方法,也没有有效的理由来区分===
相等的默认值和指定的 prop 值。
如果默认道具值应该与明确指定的相同值不同,这意味着默认道具值不是这种情况,它应该以其他方式指定,例如通过计算:
const name = computed(() => {
if (props.name == null) {
console.log('default');
return 'Friend';
} else
return props.name;
});
推荐阅读
- apache-flink - Flink 事件关联和回溯
- javascript - Ionic 5:在浏览器构建的应用程序上,如何防止重新加载时出现 404 错误
- c - 尝试使用 Wincrypt RC4 时不支持请求
- sql-server - 如何重命名 SQL Server 查询中的列
- xml - 如何使用 XSLT 搜索 XML 树节点以获取每个节点的父节点
- javascript - 请求下载具有 javascript 点击下载的文件?
- angular - Angular 项目的 l10n 和 i18n 的最佳实践是什么?
- database - 成功和失败的列名
- python - Python:修改存储为字典中的值的变量
- java - 使用 Spring Boot 使用 Apache Camel 调用 wsdl2rest --> 如何修复:转换错误?