Skip to content
Перевод синхронизирован с документацией от , хэш коммита 59ec609.

Использование без setup()

Pinia можно использовать даже если вы не используете сomposition API (если вы используете Vue <2.7, вам все равно нужно установить плагин @vue/composition-api). Хотя мы рекомендуем вам попробовать Composition API и изучить его, возможно, сейчас не самое подходящее время для вас и вашей команды, вы можете находиться в процессе миграции приложения или по какой-либо другой причине. Существует несколько функций:

Предоставление доступа ко всему хранилищу

Если вам нужен доступ практически ко всему в хранилище, то может быть слишком сложно сопоставлять каждое свойство хранилища... Вместо этого вы можете получить доступ ко всему хранилищу с помощью mapStores():

js
import { mapStores } from 'pinia'

// даны два хранилища со следующими ids
const useUserStore = defineStore('user', {
  // ...
})
const useCartStore = defineStore('cart', {
  // ...
})

export default {
  computed: {
    // обратите внимание, что мы передаем не массив, а просто одно хранилище за другим
    // каждое хранилище будет доступно как его id + 'Store'
    ...mapStores(useCartStore, useUserStore),
  },

  methods: {
    async buyStuff() {
      // используйте их где угодно!
      if (this.userStore.isAuthenticated()) {
        await this.cartStore.buy()
        this.$router.push('/purchased')
      }
    },
  },
}

По умолчанию Pinia добавляет суффикс "Store" к id каждого хранилища. Вы можете настроить это поведение, вызвав функцию setMapStoreSuffix():

js
import { createPinia, setMapStoreSuffix } from 'pinia'

// полностью удаляем суффикс: this.user, this.cart
setMapStoreSuffix('')
// this.user_store, this.cart_store (ничего страшного, я вас не осуждаю)
setMapStoreSuffix('_store')
export const pinia = createPinia()

TypeScript

По умолчанию все map-помощники поддерживают автозавершение, и вам не нужно ничего делать. Если вы вызываете setMapStoreSuffix(), чтобы изменить суффикс "Store", вам также потребуется добавить его где-то в файле TS или в файле global.d.ts. Самым удобным местом было бы то же место, где вы вызываете setMapStoreSuffix():

ts
import { createPinia, setMapStoreSuffix } from 'pinia'

setMapStoreSuffix('') // полностью удалить суффикс
export const pinia = createPinia()

declare module 'pinia' {
  export interface MapStoresCustomization {
    // установить его в то же значение, что и выше
    suffix: ''
  }
}

Предупреждение

Если вы используете файл декларации TypeScript (например, global.d.ts), не забудьте указать в его верхней части import 'pinia' для раскрытия всех существующих типов.

Released under the MIT License.

You. But 10x faster
The structured masterclass to help you leverage AI and build with an edge.
Join Early!