這兩天大概看了一下Vue 3的改版,於是就裝來玩看看,只要用vue cli 4就可以輕鬆將vue + vuex + vue-router 一併升級到支援現在的vue 3。
先全域安裝vue
npm install -g @vue/cli @vue/cli-service-global
開新的專案,建議先手選安裝vuex + Router
vue create hello-world
目前開的專案還會是舊的vue 2,要用下面指令即可升級到3,裡面程式碼他也會自動改寫
vue add vue-next
然後以前常在組件裡面用到router和vuex的變數,就用看看在Vue 3怎麼使用,如下
./views/About.vue
<template>
  <div class="about">
    <h1>This is an about page</h1>
    <input v-model="capacity" />
    <p>
      Total:{{ capacity }}
    </p>
    <button @click="increaseTotal()">Increase Total</button>
    <p>{{ store.state.msg }}</p>
    <p>{{ route.params.id }}</p>
  </div>
</template>
<script>
import { ref } from "vue";
import { useStore } from "vuex";
import { useRoute } from "vue-router";
export default {
  name: 'About',
  setup() {
    // data
    const total = ref(3);
    const store = useStore();
    const route = useRoute();
    function increaseTotal() { 
      total.value++;
      store.commit('setMsg', 'cooool');
    }
    return { total, increaseTotal, store, route }
  }
}
</script>
./store/index.js
import Vuex from 'vuex'
export default Vuex.createStore({
  state: {
    msg: "good",
  },
  mutations: {
    setMsg(state, value) {
      state.msg = value;
    }
  },
  actions: {
  },
  modules: {
  }
});
./router/index.js
import { createRouter, createWebHistory } from 'vue-router';
import Home from '../views/Home.vue'
const routes = [
{
  path: '/',
  name: 'Home',
  component: Home
},
{
  path: '/about/:id',
  name: 'About',
  // route level code-splitting
  // this generates a separate chunk (about.[hash].js) for this route
  // which is lazy-loaded when the route is visited.
  component: () => import(/* webpackChunkName: "about" */ '../views/About.vue')
}
]
const router = createRouter({
  history: createWebHistory(process.env.BASE_URL),
  routes
})
export default router