Public
Star 历史趋势
数据来源: GitHub API · 生成自 Stargazers.cn
README.md

Pinia logo


npm package build status


Pinia

Intuitive, type safe and flexible Store for Vue

  • 💡 Intuitive
  • 🔑 Type Safe
  • ⚙️ Devtools support
  • 🔌 Extensible
  • 🏗 Modular by design
  • 📦 Extremely light
  • ⛰️ Nuxt Module

The latest version of pinia works with Vue 3. See the branch v2 for a version that works with Vue 2.

Pinia is the most similar English pronunciation of the word pineapple in Spanish: piña. A pineapple is in reality a group of individual flowers that join together to create a multiple fruit. Similar to stores, each one is born individually, but they are all connected at the end. It's also a delicious tropical fruit indigenous to South America.

👉 Demo with Vue 3 on StackBlitz

👉 Demo with Nuxt 3 on StackBlitz

Help me keep working on this project 💚

Gold Sponsors

CodeRabbit

Silver Sponsors

VueMastery Controla SendCloud

Bronze Sponsors

RTVision Storyblok


FAQ

A few notes about the project and possible questions:

Q: Is Pinia the successor of Vuex?

A: Yes

Q: What about dynamic modules?

A: Dynamic modules are not type safe, so instead we allow creating different stores that can be imported anywhere

Installation

# or pnpm or yarn npm install pinia

Usage

Install the plugin

Create a pinia (the root store) and pass it to app:

// Vue 3 import { createApp } from 'vue' import { createPinia } from 'pinia' import App from './App.vue' const pinia = createPinia() const app = createApp(App) app.use(pinia) app.mount('#app')

For more detailed instructions, including Nuxt configuration, check the Documentation.

Create a Store

You can create as many stores as you want, and they should each exist in different files:

import { defineStore } from 'pinia' // main is the name of the store. It is unique across your application // and will appear in devtools export const useMainStore = defineStore('main', { // a function that returns a fresh state state: () => ({ counter: 0, name: 'Eduardo', }), // optional getters getters: { // getters receive the state as first parameter doubleCounter: (state) => state.counter * 2, // use getters in other getters doubleCounterPlusOne(): number { return this.doubleCounter + 1 }, }, // optional actions actions: { reset() { // `this` is the store instance this.counter = 0 }, }, })

defineStore returns a function that has to be called to get access to the store:

import { useMainStore } from '@/stores/main' import { storeToRefs } from 'pinia' export default defineComponent({ setup() { const main = useMainStore() // extract specific store properties const { counter, doubleCounter } = storeToRefs(main) return { // gives access to the whole store in the template main, // gives access only to specific state or getter counter, doubleCounter, } }, })

Documentation

To learn more about Pinia, check its documentation.

License

MIT

关于 About

🍍 Intuitive, type safe, light and flexible Store for Vue using the composition api with DevTools support
composition-apissrstorevuevuex

语言 Languages

TypeScript73.4%
Vue18.8%
JavaScript5.3%
CSS1.9%
HTML0.5%
Shell0.2%

提交活跃度 Commit Activity

代码提交热力图
过去 52 周的开发活跃度
100
Total Commits
峰值: 18次/周
Less
More

核心贡献者 Contributors