入门指南
核心概念
服务端渲染
开发者指南
- Migrating from Vuex ≤4
- HMR (Hot Module Replacement)
- 测试存储商店
- Usage without setup()
- Composing Stores
- Migrating from 0.x (v1) to v2
API 手册
- API Documentation
- Module: pinia
- Module: @pinia/nuxt
- Module: @pinia/testing
- Enumeration: MutationType
- Interface: TestingOptions
- Interface: DefineSetupStoreOptions
- Interface: DefineStoreOptions
- Interface: DefineStoreOptionsBase
- Interface: DefineStoreOptionsInPlugin
- Interface: MapStoresCustomization
- Interface: Pinia
- Interface: PiniaCustomProperties
- Interface: PiniaCustomStateProperties
- Interface: PiniaPlugin
- Interface: PiniaPluginContext
- Interface: StoreDefinition
- Interface: StoreProperties
- Interface: SubscriptionCallbackMutationDirect
- Interface: SubscriptionCallbackMutationPatchFunction
- Interface: SubscriptionCallbackMutationPatchObject
- Interface: _StoreOnActionListenerContext
- Interface: _StoreWithState
- Interface: _SubscriptionCallbackMutationBase
- Interface: TestingPinia
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
Usage without setup()
即使您不使用组合 API,也可以使用 Pinia(如果您使用的是 Vue <2.7,您仍然需要安装 @vue/composition-api
插件)。 虽然我们建议您尝试使用 Composition API 并学习它,但您和您的团队可能还不是时候,您可能正在迁移应用程序或任何其他原因。 有几个功能:
- mapStores
- mapState
- mapWritableState
- ⚠️ mapGetters (just for migration convenience, use
mapState()
instead) - mapActions
授予对整个商店的访问权限
如果您需要访问商店中的几乎所有内容,则映射商店的每个属性可能太多了......相反,您可以使用 mapStores()
访问整个商店:
import { mapStores } from 'pinia'
// 给定两个具有以下 id 的商店
const useUserStore = defineStore('user', {
// ...
})
const useCartStore = defineStore('cart', {
// ...
})
export default {
computed: {
// 请注意,我们没有传递数组,只有一个商店一个接一个,每个商店都可以作为其 id + 'Store' 访问
...mapStores(useCartStore, useUserStore)
},
methods: {
async buyStuff() {
// use them anywhere!
if (this.userStore.isAuthenticated()) {
await this.cartStore.buy()
this.$router.push('/purchased')
}
},
},
}
默认情况下,Pania 会在每个商店的 id
中添加"Store"
后缀。 您可以通过调用 setMapStoreSuffix()
来自定义此行为:
import { createPinia, setMapStoreSuffix } from 'pinia'
// 完全去掉后缀:this.user, this.cart
setMapStoreSuffix('')
// this.user_store, this.cart_store (也可以)
setMapStoreSuffix('_store')
export const pinia = createPinia()
TypeScript
默认情况下,所有地图助手都支持自动完成,你不需要做任何事情。 如果您调用 setMapStoreSuffix()
来更改 "Store"
后缀,您还需要将其添加到 TS 文件或您的 global.d.ts
文件中的某个位置。 最方便的地方是调用 setMapStoreSuffix()
的地方:
import { createPinia, setMapStoreSuffix } from 'pinia'
setMapStoreSuffix('') // 完全删除后缀
export const pinia = createPinia()
declare module 'pinia' {
export interface MapStoresCustomization {
// 将其设置为与上面相同的值
suffix: ''
}
}
WARNING
如果您使用的是 TypeScript 声明文件(如 global.d.ts
),请确保在其顶部使用 import 'pinia'
以公开所有现有类型。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论