pina与vuex的区别、路由守卫、vue3的所有生命周期钩子函数、vue3双向数据绑定原理、Vue3+ts如何父传子,子传父,写出代码、provide,inject 怎么使用?

本文详细探讨了pina与vuex在状态管理上的差异,包括各自的特点和使用场景。接着深入讲解了Vue3的路由守卫,包括全局、独享和组件内三种类型,并给出了代码示例。此外,介绍了vue3的所有生命周期钩子函数,重点阐述了vue3双向数据绑定的原理。最后,探讨了Vue3+typescript中父传子、子传父的实现方式以及provide和inject的使用方法,帮助开发者更好地理解和应用这些关键概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、pina与vuex的区别

pina与vuex都是状态管理的工具,但是pina有两种语法,一种是选项式API,一种是组合式API

  1. pinia可以创建多个全局仓库,不用像 Vuex 一个仓库嵌套模块,结构复杂。
  2. pinia的核心概念有state、getter、action三个部分,vuex有五个部分
  3. pinia对可以直接对state进行修改,vuex要使用mutations中的方法进行修改
  4. 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默认值,用来接收传过来的数据

### Vue2 Vuex Vue3 Pinia 状态管理库差异 #### 基本概念设计哲学 Vuex Pinia 都旨在提供一种集中式的状态管理模式,但在设计理念上存在显著区别Vuex 更加严格地遵循 Flux 架构模式,强调单向数据流;而 Pinia 则更加灵活,在保持核心功能的同时简化了 API 设计[^1]。 #### 类型安全性 对于 TypeScript 用户来说,Pinia 提供了更好的类型推断支持,这使得开发者能够更容易编写类型安全的应用程序。相比之下,Vuex 在处理复杂应用时可能会遇到一些类型系统的局限性[^4]。 #### 接口API风格 - **Vuex** - 使用 `store` 对象来定义全局状态树。 - 明确区分 actions、mutations 及 getters 函数的作用域。 - 支持模块化开发但需要显式声明命名空间以及注册子模块。 ```javascript // vuexStore/index.js import { createStore } from &#39;vuex&#39;; export default createStore({ strict: true, state() { return { count1: 1, count2: 2, }; }, getters: { sum(state) { return state.count1 + state.count2; } } }); ``` - **Pinia** - 不再强制分离 mutations actions,统一为 actions 来改变状态。 - 自动扁平化的 store 结构减少了配置上的冗余。 - 支持 Composition API Options API 并存的方式,提高了灵活性[^5]. ```typescript // piniaStore.ts import { defineStore } from &#39;pinia&#39;; import { ref } from &#39;vue&#39;; export const useCounterStore = defineStore(&#39;counter&#39;, () => { const count1 = ref(1); const count2 = ref(2); function incrementCount1() { count1.value++; } computed(() => ({ get sum() { return count1.value + count2.value; } })); return { count1, count2, incrementCount1, sum }; }); ``` #### 动态特性 Pinia 的一大优势在于其动态能力更强——它允许在运行期间轻松创建新的 stores 或者修改现有的 ones 而不需重启整个应用程序。这种机制特别适合大型项目或微前端架构下的场景需求。 #### 生态兼容性迁移成本 由于 Pinia 向后兼容旧版 Vuex 的部分接口(特别是在 Vue 2.x 版本中),因此从 Vuex 迁移到 Pinia 的过程相对简单直接。然而需要注意的是两者之间仍然存在着细微差别,所以在实际操作前最好先阅读官方文档并做好充分准备。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值