Giter Site home page Giter Site logo

cary-mao / pinia Goto Github PK

View Code? Open in Web Editor NEW

This project forked from vuejs/pinia

0.0 0.0 0.0 8.59 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.30% TypeScript 76.67% Shell 0.16% HTML 0.31% Vue 10.12% CSS 3.44%

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.

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 * 2 + 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

posva avatar dependabot[bot] avatar dependabot-preview[bot] avatar renovate-bot avatar renovate[bot] avatar akhigbe-e avatar taist24 avatar bodograumann avatar dannyfeliz avatar yyx990803 avatar tslocke avatar pierresaid avatar pi0 avatar zuramai avatar reksc avatar almaraubel avatar augustpi avatar ackzell avatar bencodezen avatar benshelton avatar sanscheese avatar taigabrew avatar danielkellyio avatar danielroe avatar davidbernegger avatar filipsobol avatar garethnic avatar jstavanja avatar jerryyuanj avatar jessevanassen 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.