美文网首页
2023.23 使用vue3问题记录

2023.23 使用vue3问题记录

作者: wo不是黄蓉 | 来源:发表于2023-05-14 21:24 被阅读0次

    highlight: ascetic
    theme: fancy


    大家好,我是wo不是黄蓉,今年学习目标从源码共读开始,希望能跟着若川大佬学习源码的思路学到更多的东西*。

    • 使用数据存储pinia
    //main.ts
    import { createPinia } from 'pinia'
    app.use(createPinia())
    

    定义store

    //store/modules/user
    import { defineStore } from 'pinia'
    import { getUserInfo } from '@/api/common'
    import { UserState } from '@/@types/store'
    
    export const useUserStore = defineStore('user', {
      state: (): UserState => ({
        userInfo: null
      }),
    
      getters: {
        user(state) {
          return state.userInfo
        }
      },
    
      actions: {
        async getUserInfo() {
          this.userInfo = await getUserInfo()
        }
      }
    })
    
    

    使用store

    
    import { useUserStore } from '@/store/modules/user'
      const userStore = useUserStore()//获取用户信息
    
    • 路由跳转,页面引入路由,不使用$router,使用router.push(xxx)
    
    import router from '@/router' 
    router.push({ name: 'billInfo', params: { billCode: billCode.value } })
    
    • 获取路由参数信息:
    
    //路由跳转
    import { useRoute } from 'vue-router'
    const route = useRoute()
    route.params
    
    • 使用生命周期函数
    import {  onMounted, onDeactivated, } from 'vue'
    onMounted(() => {
     //xxx
    })
    onDeactivated(() => {
     //xxx
    })
    
    • 使用生命周期函数onMounted ts提示报错,引入onMounted使用没问题,ts提示“"vue"”没有导出的成员“onMounted”。你是否指的是“onUnmounted”
    • 使用watch,其他computednextTick方法类似,对比vue2没有filters方法了,filters可以用函数实现
    
    import {  watch } from 'vue'
    const refScrollTop = ref<number>(0)
    watch(refScrollTop, (val) => {})
    
    • 路由注册方式
    //router/index.ts
    import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router'
    const router = createRouter({
      history: createWebHistory(),
      routes
    })
    
    export default router
    
    //main.ts注册
    import router from '@/router'
    app.use(router).mount('#app')
    
    • 父组件给子组件传参
    //父组件
    <tabs :tab-list="tabList" @changeTab="changeTab"></tabs>
    //子组件
    const props = defineProps(['tabList'])//属性传参
    const tabList = ref(props.tabList)
    
    • 子组件给父组件传参
    //父组件
    <tabs :tab-list="tabList" @changeTab="changeTab"></tabs>
    function changeTab(index: number) {
      activeTab.value = index
    }
    //子组件
    const emits = defineEmits(['changeTab'])
    
    • Vue组件使用setup+ts语法
    
    <script setup lang="ts" name="HomePage"></script>
    

    相关文章

      网友评论

          本文标题:2023.23 使用vue3问题记录

          本文链接:https://www.haomeiwen.com/subject/bdopsdtx.html