一、pina与vuex的区别
pina与vuex都是状态管理的工具,但是pina有两种语法,一种是选项式API,一种是组合式API
- pinia可以创建多个全局仓库,不用像 Vuex 一个仓库嵌套模块,结构复杂。
- pinia的核心概念有state、getter、action三个部分,vuex有五个部分
- pinia对可以直接对state进行修改,vuex要使用mutations中的方法进行修改
- pinia不支持时间旅行和编辑等调试功能,vuex支持
二、路由守卫
路由守卫分为全局路由守卫、组件内的守卫、路由独享守卫
1、全局路由守卫(可选的第三个参数next)
- 全局前置守卫 router.berforeEach((to,from)=>{})
- 全局解析守卫 router.berforeResolve((to,from)=>{})
- 全局后置守卫 router.afterEach((to,from)=>{})
2、路由独享守卫(直接在路由配置上定义)
- beforeEnter:(to,from)=>{}
3、组件内的守卫
- beforeRouteEnter(to,next){}
- beforeRouteUpdate(to,next){}
- beforeRouteLeave(to,next){}
三、vue3的所有生命周期钩子函数
setup--beforeCreate与created的结合
onBeforeMount-onMounted
onBeforeUpdate-onUpdated
onBeforeUnmount-onUnmounted
onActivated-onDeactivated
四、vue3的双向数据绑定原理
vue3是通过proxy方法劫持对象的访问器,监听整个对象,通过get、set方法实现双向数据绑定,而vue2中数据只有放在data里是响应式的,而object.defineproperty()方法只能遍历对象属性进行劫持,所以通过方法给数据增加新属性不具备响应式,vue2提供了this.$set用来解决该问题
五、Vue3+ts如何父传子,子传父,写出代码。
1、父传子
1.父组件传递给子组件
<SonVue :msg="msg" />
2.子组件接收父组件的传递
const props = defineProps<{
msg: number
}>()
3.子组件使用父组件传递的值
const str:sting=props.msg
2、子传父
1.子组件传递给父组件
const inputVal = ref('');
const emit = defineEmits<{
(e: "onReceiveMsg", inputVal : string): void
}>();
const sendMsg = () => {
emit("onReceiveMsg", inputVal.value);
}
六、provide,inject 怎么使用?
provide,inject是解决跨级组件通讯的方案,这对选项是成对使用的,provide 选项应该是一个对象或返回一个对象的函数,用来传递数据。inject是一个字符串数组,或一个对象,当为对象时包含from和default默认值,用来接收传过来的数据