第一种方式:
App.vue
<script setup>import NavTree from "@/components/NavTree.vue";import {ref} from "vue";const ids = ref([1,2,3,4,5,6]);provide('ids', ids);// 这个 navs 有好几百个const navs = ref([ { id: 1, parent_id: 0, name: '名称1', children: [ { id: 2, parent_id: 1, name: '名称2', children: [ // ... ] } ] } // ...]);</script><template> <NavTree :navs="navs" /></template>
NavTree.vue
<script setup>import {getCurrentInstance} from "vue";defineProps(['navs']);const {proxy} = getCurrentInstance();const nav_ids = proxy.$route.meta.nav_ids;const ids = inject('ids');</script><template> <div v-for="(val, index) in navs" :key="index"> <p>{{val.name}} {{ids}} {{nav_ids}}</p> <NavTree :navs="val.children" /> </div></template>
第二种方式:
App.vue
<script setup>import NavTree from "@/components/NavTree.vue";import {ref} from "vue";const ids = ref([1,2,3,4,5,6]);// 这个 navs 有好几百个const navs = ref([ { id: 1, parent_id: 0, name: '名称1', children: [ { id: 2, parent_id: 1, name: '名称2', children: [ // ... ] } ] } // ...]);</script><template> <NavTree :navs="navs" :ids="ids" :nav_ids="$route.meta.nav_ids" /></template>
NavTree.vue
<script setup>defineProps(['navs', 'ids', 'nav_ids']);</script><template> <div v-for="(val, index) in navs" :key="index"> <p>{{val.name}} {{ids}} {{nav_ids}}</p> <NavTree :navs="val.children" :ids="ids" :nav_ids="nav_ids" /> </div></template>
上面这两个种 ids
和 nav_ids
传值, 哪种传值会更快,还是说都一样,如果 navs
很多的时候
速度,内部都是对组件实例属性的 get 操作,我认为是一样快的
优势,就是 inject 的使用范围肯定大于 prop的,但两者都局限于组件,不能脱离组件使用
效率上基本没有区别
全局属性
和 props
本质上都对象,都是从对象上取值,不会产生效率上的差异provide/inject
内部存储上下文状态的数据结构也是对象,无非是给你提供了两个方法来 get
和 set
,也就比直接从对象上取值多产生了一些函数执行
的开销,而这些开销完全可以忽略不计再说哪种好,技术没有好坏,无论是 props
or provide/inject
都有与之对应的应用场景
props
是 组件化
的开发模式下最基础的组件间传值方式provide/inject
是为了解决 组件层级
太深时,通过 props 传值很麻烦的问题,但 弊端
是共享状态的方式太隐晦,组件的使用者无法通过 查看组件内部代码/或相关文档 以外的方式了解组件 provide
了什么,inject
了什么,也就是说 provide/inject
会让组件变得不纯,依赖不明确store
(vuex,pinia) 又是为了更好的管理状态而被提出的方案所以,基于自己项目的体量选择合适的方式即可
关于vue3如何写hooks的问题? 如何限值list是ref值,亦或者即使传入的是普通值,也可以触发watch?还有就是这个hooks中的watch在使用了hooks之后一直存在吗,还是说组件销毁了watch就自动销毁,还是需要在这个hooks在写上组件卸载时手动销毁。 我记得antfu之前有个演讲提到过在hooks里用geter函数和tovalue、toref来提升兼容性,但是我记不清了,不知
本文向大家介绍哪种PHP SOAP或NuSOAP更好?,包括了哪种PHP SOAP或NuSOAP更好?的使用技巧和注意事项,需要的朋友参考一下 PHP SOAP从PHP版本5.0.1开始可用。仍在使用PHP4的用户需要使用NuSOAP。 本地PHP代码在性能方面更好,并且相对而言没有错误。因此,建议使用PHP SOAP(如果可用)。 另一方面,NuSOAP在其官方网站上也没有太多文档。 NuSOA
我是个初学者只是想找个更好的方法来解决问题 问题是,最佳实践是捕捉异常还是避免异常? 或
描述:在父组件引入子组件,子组件是一个弹窗,两种方式都可实现,哪种写法更好,为什么? 方式1是在父组件定义控制子组件是否打开的参数以及传递的参数,在子组件进行监听赋值 方式2是用ref操作子组件方法 方式一: 方式二:
需求,我的 vue3 中的 data=ref([]) 更新之后,我希望 echarts 的图标也跟着一起更新 但是目前不会,我该怎么修改
问题内容: 使用哪种更好或更方便: 要么 问题答案: 您是否完全需要类型属性?如果您使用的是HTML5,则不会。否则,是的。HTML 4.01和XHTML 1.0 根据需要指定属性,而HTML5具有可选属性,默认为。HTML5现在得到了广泛的实现,因此,如果您使用HTML5doctype,则是有效且不错的选择。 至于type属性中应该包含的内容,2006年注册的MIME类型旨在替代所有主要浏览器(