vue3 vite typescript vue-router vuex

vue3 typescript vue-router vuex setup

最近发现vue3相关库都更新的差不多了,尝试学习了新的版本, 使用setup 的确变了很多,像ref 、prop面目全非,刚开始用还找了很久

创建项目

yarn create vite  name --template vue-ts

vue-router

# 安装
npm install vue-router@4
// vim router/index.ts
import { createRouter, createWebHistory } from 'vue-router'

const router = createRouter({
    history: createWebHistory(),
    routes: [
        {
            path: '/',
            name: 'home',
            component: () => import('../view/file.vue')
        },
        {
            path: '/t',
            name: 't',
            component: () => import('../view/file.vue')
        }
        //...
    ],
})

export default router

vuex

# 安装
yarn add vuex@next --save
// store/index.ts
import { InjectionKey } from 'vue'
import { createStore, useStore as baseUseStore, Store } from 'vuex'

export interface State {
    count: number
}

export const key: InjectionKey<Store<State>> = Symbol()

export const store = createStore<State>({
    state: {
        count: 0
    },
    mutations: {
        increment(state) {
            state.count ++
        }
    },
    actions: {
        asd(context) {
            context.commit('increment')
        }
    }
})

// 定义自己的 `useStore` 组合式函数
export function useStore () {
    return baseUseStore(key)
}

main.ts

import {createApp} from 'vue'
import App from './App.vue'
import router from './router'
import {store, key} from './store'

const app = createApp(App)
app.use(router)
app.use(store, key)
app.mount('#app')

使用技巧

// prop vue3 v-module 绑定的事件名改了
// setup
let emits = defineEmits<{
  (e: 'update:modelValue', v: boolean): void
}>()
let props = defineProps<{
  modelValue: boolean
}>()

function setValue(b: boolean) {
  emits('update:modelValue', b)
}

// slots 中默认插槽
// props 允许为空的写法, 否则会报错
import {computed, useSlots, withDefaults} from 'vue'
const slots = useSlots()
const icon = computed(() => {
  // @ts-ignore
  if (slots.default) return slots.default()[0].children?.trim()
  return ''
})
const props = withDefaults(defineProps<{
  color?: string
}>(), {
  color: ''
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值