GithubHelp home page GithubHelp logo

nikhilkutinha / pinia Goto Github PK

View Code? Open in Web Editor NEW

This project forked from vuejs/pinia

1.0 0.0 0.0 8.8 MB

๐Ÿ Intuitive, type safe, light and flexible Store for Vue using the composition api with DevTools support

Home Page: https://pinia.vuejs.org

License: MIT License

JavaScript 9.25% TypeScript 76.55% Shell 0.16% HTML 0.31% Vue 10.07% CSS 3.66%

pinia's Introduction

Pinia logo


npm package build status code coverage


Pinia

Intuitive, type safe and flexible Store for Vue

  • ๐Ÿ’ก Intuitive
  • ๐Ÿ”‘ Type Safe
  • โš™๏ธ Devtools support
  • ๐Ÿ”Œ Extensible
  • ๐Ÿ— Modular by design
  • ๐Ÿ“ฆ Extremely light

Pinia works both for Vue 2.x and Vue 3.x. It requires Vue 2 with the latest @vue/composition-api or Vue ^3.2.0-0.

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 ๐Ÿ’š

Platinum Sponsors

Finogeeks

Gold Sponsors

VueJobs

Silver Sponsors

VueMastery Bird Eats Bug

Bronze Sponsors

Storyblok NuxtJS


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

Roadmap / Ideas

  • Should the state be merged at the same level as actions and getters?
  • Allow grouping stores together into a similar structure and allow defining new getters (pinia) You can directly call useOtherStore() inside of a getter or action.
  • Getter with params that act like computed properties (@ktsn) Can be implement through a custom composable and passed directly to state.

Installation

yarn add pinia
# or with npm
npm install pinia

If you are using Vue 2, make sure to install latest @vue/composition-api:

npm install pinia @vue/composition-api

Usage

Install the plugin

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

import { createPinia } from 'pinia'

app.use(createPinia())

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
    doubleCount: (state) => state.counter * 2,
    // use getters in other getters
    doubleCountPlusOne(): number {
      return this.doubleCount + 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, doubleCount } = storeToRefs(main)

    return {
      // gives access to the whole store in the template
      main,
      // gives access only to specific state or getter
      counter,
      doubleCount,
    }
  },
})

Documentation

To learn more about Pinia, check its documentation.

License

MIT

pinia's People

Contributors

ackzell avatar akhigbe-e avatar alanscut avatar almaraubel avatar augustpi avatar bencodezen avatar benshelton avatar bodograumann avatar danielkellyio avatar danielroe avatar dannyfeliz avatar davidbernegger avatar dependabot-preview[bot] avatar dependabot[bot] avatar filipsobol avatar garethnic avatar guillaumeduliscouet avatar pi0 avatar pierresaid avatar posva avatar reksc avatar renovate-bot avatar renovate[bot] avatar sanscheese avatar taigabrew avatar taist24 avatar tkint avatar tslocke avatar yyx990803 avatar zuramai avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.