Pinia (pronounced /piːnjʌ/, or "peenya" in English) is a store library and state management framework for Vue.js.[1] Designed primarily for building front-end web applications, it uses declarative syntax and offers its own state management API. Pinia was endorsed by the Vue.js team as a credible alternative to Vuex and is currently the official state management library for Vue.[2]

Pinia
Original author(s)Eduardo San Martin Morote
Initial releaseNovember 2019; 5 years ago (2019-11)
Stable release
2.1.7 / 13 Oct 2023
Repositorygithub.com/vuejs/pinia
Written inTypeScript
PlatformWeb platform
PredecessorVuex
Size~1.5 KB
TypeState management library
LicenseMIT License
Websitepinia.vuejs.org

Overview

edit

Unlike Vuex, Pinia is modular by design and does not include mutations. This enables developers to create numerous stores and import them into components as needed. The framework provides a centralised store with a built-in mechanism for saving, updating and retrieving application state.[3]

History

edit

Pinia was conceived by Vue developer Eduardo San Martin Morote[4] as an exploration of what Vuex could look like in the future.[5] This involved creating a simpler API with "less ceremony" and providing better support for type inference with TypeScript.[6] It became an official part of the Vue.js ecosystem on February 7, 2022.[5]

The store library takes its name from piña, the Spanish word for "pineapple." According to its creators, "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."[7]

Features

edit

Store pillars

edit

Stores in Pinia are defined via a JavaScript object with a variety of characteristics that govern their behaviour. These are regarded as the "pillars" of a store, and as shown in the code example below, include id, state, getters and actions.[8]

import { createStore } from 'pinia'

export const useCounterStore = createStore({
  id: 'counter',

  state: () => ({
    count: 0
  }),

  getters: {
    doubleCount: state => state.count * 2
  },

  actions: {
    increment(amount) {
      this.state.count += amount
    }
  }
})

Devtools support

edit

Pinia integrates with Vue Devtools, a popular extension for debugging Vue.js applications.[9]

Support for plugins

edit

The framework includes support for multiple plugins, including Nuxt and the aforementioned Devtools.[10]

Hot module replacement

edit

Pinia allows developers to maintain existing states while writing code and to modify stores without reloading the page.

See also

edit

References

edit
  1. ^ Gerchev, Ivaylo (2022-04-11). "Complex Vue 3 state management made easy with Pinia". LogRocket Blog. Retrieved 2023-02-22.
  2. ^ "Build a To-do List App with Pinia and Vue 3". Deepgram. 2022-10-12. Retrieved 2023-02-22.
  3. ^ Jahr, Adam. "What is Pinia? - Pinia Fundamentals". Vue Mastery. Retrieved 2023-01-18.
  4. ^ "Pinia, an Alternative Vue.js Store - Vue School Blog". vueschool.io. Retrieved 2023-01-17.
  5. ^ a b Mariappan (2022-10-13). "What makes Pinia the new default?". Frontend Weekly. Retrieved 2023-01-17.
  6. ^ "Pinia vs. Vuex: Is Pinia a good replacement for Vuex?". DEV Community 👩‍💻👨‍💻. Retrieved 2023-02-22.
  7. ^ "Everything Beyond State Management in Stores with Pinia". morioh.com. Retrieved 2023-02-22.
  8. ^ "Pinia vs Vuex: Farewell Vuex, Hello Pinia! How to Get Started? | SPG Blog | Web Applications Development |". Software Planet Group. 2023-01-11. Retrieved 2023-01-17.
  9. ^ "How To Handle State Management in Vue Using Pinia - CoderPad". coderpad.io. 2023-01-27. Retrieved 2023-02-22.
  10. ^ "Everything Beyond State Management in Stores with Pinia by Eduardo San Martin Morote - GitNation". portal.gitnation.org. Retrieved 2023-01-18.
edit