1、组件通信常用方式有一下8中
props
$emit/
$parent/
$attrs/
ref
$root
eventbus
vuex
provide/inject
有关vue2的 v-for和v-if,点这里
结论是:vue2 和 vue3的答案是相反的,官方文档有说,点这里
错误的做法:
//这将抛出一个错误,因为“todo” property 没有在实例上定义
<li v-for="todo in todos" v-if="!todo.isComplete"> // 你要敢这样用,我就敢报错,一切为了性能着想
{{ todo.name }}
</li>
正确的做法:
<template v-for="todo in todos" :key="todo.name">
<li v-if="!todo.isComplete">
{{ todo.name }}
</li>
</template>
官网链接,点这里
实例用这个时:
<input v-model="searchText" />
其实等价于:
<input :value="searchText" @input="searchText = $event.target.value" />
如果在组件上使用:
<custom-input v-model="searchText"></custom-input>
其实等价于:
<custom-input
:model-value="searchText"
@update:model-value="searchText = $event"
></custom-input>
那么
app.component('custom-input', {
props: ['modelValue'],
emits: ['update:modelValue'],
template: `
`
})
编译器完成这个转变
不同的标签上应用不同,
radio 和 checkbox 对应的是 checked 和 change事件
select 对应的是 value 和 change
mixins slots extends
const mymixin= {
methods:{
fn(){}
}
}
//mymixin 可能造成名字冲突 , 别人看我写的mymixin,不知道mymixin的来源
Vue.mixin(mymixin) // 全局
const Comp = {
mixins:[mymixin] // 局部
}
<div>
<slot></slot> // 替换为老爹给我的财产
</div>
<div>
<Child>给儿子的财产</Child>
</div>
vue3引入composition api,可以解决上面的问题
function useXXX(){} // 可以复用的逻辑1
function useYYY(){} // 可以复用的逻辑2
const Comp = {
setup(){
const {xx} = useXX() // 在哪里使用,就在哪里导出
const {yy} = useYY() // 在哪里使用,就在哪里导出
return { xx , yy }
}
}
可以修改,但是不建议修改,因为单项数据流向,官网说,修改父组件数据,逆向数据流,会让数据变得难以理解
const props = defineProps(["foo"])
props.foo = "bar" // 发出警告,props是只读的
实际开发想到要修改父组件的数据两种使用场景,只是为了借鸡生蛋而已,不是真的修改:
const props = defineProps(["initialCounter"])
const counter = ref(props.initailCounter)
const props = defineProps(["size"])
const normalizedSize = computed(()=> props.size.trim().toLowerCase())
真正修改父组件的数据方法:
<child @fn="f" /> // 父组件
methods:{
fun(){
this.$emit("fn",params) // 子组件触发fn,于是触发组建的f,进一步修改父组件的状态
}
}
router.beforeEach((to, from, next) => {
NProgress.start()
next()
next(`/login?redirect=${to.path}`)
router.addRoutes // 动态添加路由
})
router.afterEach(() => {
NProgress.done()
})
官方文档,点这里查看:
vue3在框架层面也有亮点改进,查看虚拟dom转换过程,点这里:
看我这边文章
点击我的文章链接
在这里插入图片描述