Rumah > hujung hadapan web > View.js > Berikut ialah penulisan semula 'perangkap pinia vue3 dan analisis kod contoh penyelesaian': 'Analisis vue3 pinia, termasuk perangkap dan penyelesaian, digabungkan dengan kod contoh untuk analisis.'

Berikut ialah penulisan semula 'perangkap pinia vue3 dan analisis kod contoh penyelesaian': 'Analisis vue3 pinia, termasuk perangkap dan penyelesaian, digabungkan dengan kod contoh untuk analisis.'

WBOY
Lepaskan: 2023-05-10 08:37:09
ke hadapan
1930 orang telah melayarinya

Pemasangan

yarn add pinia # or npm install pinia
Salin selepas log masuk

Penggunaan

// user.ts
import { defineStore } from 'pinia'
export const useUserStore = defineStore({
  id: 'user',
  state: () => ({
    ...
  }),
  actions: {
    ...
  }
})
// components.vue
import { useUserStore } from '@/store/user'
const userStore = useUserStore()
Salin selepas log masuk

Masalah semasa penggunaan

Tidak boleh mengakses 'useUserStore' sebelum permulaan

Langkah pengeluaran semula

>< 🎜 kami akan menentukan sama ada pengguna log masuk dalam cangkuk penghalaan untuk menentukan kebenaran. Contohnya:

// permission.ts
import { NavigationGuardNext, RouteLocationNormalized } from &#39;vue-router&#39;
import router from &#39;./router&#39;
import { useUserStore } from &#39;./store/user&#39;
const userStore: any = useUserStore()
router.beforeEach(async(to: RouteLocationNormalized, from: RouteLocationNormalized, next: NavigationGuardNext) => {
  // TODO 判断是否登录
  if (userStore.name) {
    ...
  }
})
// main.ts
const app = createApp(App)
app.use(createPinia())
import router from &#39;./router&#39;
import &#39;@/permission&#39;
app.use(router)
app.mount(&#39;#app&#39;)
Salin selepas log masuk

Punca masalah

Apabila kod dilaksanakan dari atas ke bawah, apabila

ditemui, modul status pengguna akan diperoleh, tetapi aplikasi belum telah dipasang lagi, jadi Pinia's The global state belum dimulakan lagi. Akibatnya, apabila memulakan pemerolehan status modul pengguna, status global tidak dimulakan, sekali gus menyebabkan masalah semasa. const userStore: any = useUserStore()

Penyelesaian

Apabila fungsi cangkuk penghalaan memperoleh modul status pengguna dan memanggil cangkuk penghalaan, ini bermakna keadaan global telah dimulakan sepenuhnya. Tetapi ia akan menyebabkan modul status pengguna diperolehi setiap kali cangkuk penghalaan dipanggil, yang akan menyebabkan pembaziran sumber (sudah tentu ia boleh mencapai tujuan yang diharapkan, tetapi ia bukan apa yang kita perlukan). Kita boleh mengisytiharkan pembolehubah dalam lapisan luar untuk menyimpan keadaan dan membuat pertimbangan dalam cangkuk penghalaan Jika pembolehubah semasa kosong, ini bermakna keadaan belum diperoleh lagi, dan keadaan diperoleh di bawah situasi semasa (. serupa dengan singleton). Kod akhir:

// permission.ts
import { NavigationGuardNext, RouteLocationNormalized } from &#39;vue-router&#39;
import router from &#39;./router&#39;
import { useUserStore } from &#39;./store/user&#39;
let userStore: any = null
router.beforeEach(async(to: RouteLocationNormalized, from: RouteLocationNormalized, next: NavigationGuardNext) => {
  if (userStore === null) {
    userStore = useUserStore()
  } 
  // TODO 判断是否登录
  if (userStore.name) {
    ...
  }
})
Salin selepas log masuk

Atas ialah kandungan terperinci Berikut ialah penulisan semula 'perangkap pinia vue3 dan analisis kod contoh penyelesaian': 'Analisis vue3 pinia, termasuk perangkap dan penyelesaian, digabungkan dengan kod contoh untuk analisis.'. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan