Skip to content

๐Ÿ ํ•œ๊ธ€ํ™” ์ž‘์—…์„ ์œ„ํ•ด Vue.js์˜ ๊ณต์‹ Pinia๋ฅผ ํฌํฌํ•œ ์ €์žฅ์†Œ ์ž…๋‹ˆ๋‹ค.

License

niceplugin/Vuejs-Pinia-KO

ย 
ย 

Repository files navigation

Pinia logo


npm ํŒจํ‚ค์ง€ ๋นŒ๋“œ ์ƒํƒœ ์ฝ”๋“œ ์ปค๋ฒ„๋ฆฌ์ง€


Pinia

์—ฌ๊ธฐ๋Š” Vue ์ƒํƒœ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ Pinia ์›น ํŽ˜์ด์ง€ ํ•œ๊ธ€ํ™”๋ฅผ ์œ„ํ•ด ํฌํฌํ•œ ์ €์žฅ์†Œ ์ž…๋‹ˆ๋‹ค. 2024-03-31 Open AI API์˜ GPT-4-turbo ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ผ๊ด„ ์žฌ๋ฒˆ์—ญ ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ผ๋ถ€ ์˜ค์—ญ ๋“ฑ ์ž˜๋ชป๋œ ๋ถ€๋ถ„ PR ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

์ง๊ด€์ ์ด๊ณ , ํƒ€์ž… ์•ˆ์ „ํ•˜๋ฉฐ, ์œ ์—ฐํ•œ Vue์˜ Store

  • ๐Ÿ’ก ์ง๊ด€์ ์ธ
  • ๐Ÿ”‘ ํƒ€์ž… ์•ˆ์ „
  • โš™๏ธ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ ์ง€์›
  • ๐Ÿ”Œ ํ™•์žฅ ๊ฐ€๋Šฅ
  • ๐Ÿ— ๋ชจ๋“ˆํ™” ์„ค๊ณ„
  • ๐Ÿ“ฆ ๋งค์šฐ ๊ฐ€๋ฒผ์›€
  • โ›ฐ๏ธ Nuxt ๋ชจ๋“ˆ

Pinia๋Š” Vue 2์™€ Vue 3 ๋ชจ๋‘์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

Pinia๋Š” ์ŠคํŽ˜์ธ์–ด๋กœ 'ํŒŒ์ธ์• ํ”Œ'์ด๋ผ๋Š” ๋‹จ์–ด์˜ ๊ฐ€์žฅ ์œ ์‚ฌํ•œ ์˜์–ด ๋ฐœ์Œ์ž…๋‹ˆ๋‹ค: piรฑa. ์‹ค์ œ๋กœ ํŒŒ์ธ์• ํ”Œ์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฐœ๋ณ„ ๊ฝƒ๋“ค์ด ๋ชจ์—ฌ ํ•˜๋‚˜์˜ ๋‹ค์ค‘ ๊ณผ์ผ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์Šคํ† ์–ด๋“ค์ฒ˜๋Ÿผ, ๊ฐ๊ฐ์€ ๊ฐœ๋ณ„์ ์œผ๋กœ ํƒ„์ƒํ•˜์ง€๋งŒ, ๊ฒฐ๊ตญ ๋ชจ๋‘ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋‚จ์•„๋ฉ”๋ฆฌ์นด ์›์‚ฐ์˜ ๋ง›์žˆ๋Š” ์—ด๋Œ€ ๊ณผ์ผ์ž…๋‹ˆ๋‹ค.

์ด ํ”„๋กœ์ ํŠธ๋ฅผ ๊ณ„์† ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ์„ธ์š” ๐Ÿ’š


FAQ

์ด ํ”„๋กœ์ ํŠธ์™€ ๊ฐ€๋Šฅํ•œ ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ๋…ธํŠธ:

Q: Pinia๋Š” Vuex์˜ ํ›„์†์ž‘์ธ๊ฐ€์š”?

A: ์˜ˆ

Q: ๋™์  ๋ชจ๋“ˆ์€ ์–ด๋–ป๊ฒŒ ๋˜๋‚˜์š”?

A: ๋™์  ๋ชจ๋“ˆ์€ ํƒ€์ž… ์•ˆ์ „ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ๋Œ€์‹  ๋‹ค๋ฅธ ์Šคํ† ์–ด๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ฒŒ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค ๊ทธ๋ฆฌ๊ณ  ์–ด๋””์„œ๋‚˜ ์ž„ํฌํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

์„ค์น˜

# ๋˜๋Š” pnpm ๋˜๋Š” yarn
npm install pinia

Vue <2.7์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, ์ตœ์‹  @vue/composition-api๋ฅผ ์„ค์น˜ํ•˜์„ธ์š”:

npm install pinia @vue/composition-api

์‚ฌ์šฉ๋ฒ•

ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์น˜

pinia(๋ฃจํŠธ ์Šคํ† ์–ด)๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์•ฑ์— ์ „๋‹ฌํ•˜์„ธ์š”:

// 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')
// Vue 2
import { createPinia, PiniaVuePlugin } from 'pinia'

Vue.use(PiniaVuePlugin)
const pinia = createPinia()

new Vue({
  el: '#app',
  // ๊ธฐํƒ€ ์˜ต์…˜...
  // ...
  // ๋™์ผํ•œ ํŽ˜์ด์ง€์—์„œ ์—ฌ๋Ÿฌ Vue ์•ฑ์— ๋™์ผํ•œ `pinia` ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  pinia,
})

Nuxt ๊ตฌ์„ฑ์„ ํฌํ•จํ•œ ๋” ์ž์„ธํ•œ ์ง€์นจ์€ ๋ฌธ์„œ๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

์Šคํ† ์–ด ์ƒ์„ฑ

์›ํ•˜๋Š” ๋งŒํผ ๋งŽ์€ ์Šคํ† ์–ด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ฐ ์Šคํ† ์–ด๋Š” ๋‹ค๋ฅธ ํŒŒ์ผ์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค:

import { defineStore } from 'pinia'

// main์€ ์Šคํ† ์–ด์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ์ด ์ด๋ฆ„์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด์—์„œ ๊ณ ์œ ํ•˜๋ฉฐ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
export const useMainStore = defineStore('main', {
  // ์ƒˆ๋กœ์šด ์ƒํƒœ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜
  state: () => ({
    counter: 0,
    name: 'Eduardo',
  }),
  // ์˜ต์…˜์ธ getter๋“ค
  getters: {
    // getter๋“ค์€ ์ฒซ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ƒํƒœ๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค.
    doubleCounter: (state) => state.counter * 2,
    // ๋‹ค๋ฅธ getter์—์„œ getter ์‚ฌ์šฉ
    doubleCounterPlusOne(): number {
      return this.doubleCounter + 1
    },
  },
  // ์˜ต์…˜์ธ ์•ก์…˜
  actions: {
    reset() {
      // `this`๋Š” ์Šคํ† ์–ด ์ธ์Šคํ„ด์Šค๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
      this.counter = 0
    },
  },
})

defineStore๋Š” ์Šคํ† ์–ด์— ์ ‘๊ทผํ•˜๋ ค๋ฉด ํ˜ธ์ถœํ•ด์•ผ ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค:

import { useMainStore } from '@/stores/main'
import { storeToRefs } from 'pinia'

export default defineComponent({
  setup() {
    const main = useMainStore()

    // ํŠน์ • ์Šคํ† ์–ด ์†์„ฑ์„ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค.
    const { counter, doubleCounter } = storeToRefs(main)

    return {
      // ํ…œํ”Œ๋ฆฟ์—์„œ ์ „์ฒด ์Šคํ† ์–ด์— ์ ‘๊ทผ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
      main,
      // ํŠน์ • ์ƒํƒœ ๋˜๋Š” getter์—๋งŒ ์ ‘๊ทผ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
      counter,
      doubleCounter,
    }
  },
})

๋ฌธ์„œ

Pinia์— ๋Œ€ํ•ด ๋” ์•Œ์•„๋ณด๋ ค๋ฉด ํ•œ๊ธ€ ๋ฌธ์„œ๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

๋ผ์ด์„ผ์Šค

MIT

About

๐Ÿ ํ•œ๊ธ€ํ™” ์ž‘์—…์„ ์œ„ํ•ด Vue.js์˜ ๊ณต์‹ Pinia๋ฅผ ํฌํฌํ•œ ์ €์žฅ์†Œ ์ž…๋‹ˆ๋‹ค.

Resources

License

Code of conduct

Security policy

Stars

Watchers

Forks

Packages

No packages published

Languages

  • TypeScript 79.4%
  • Vue 11.3%
  • JavaScript 6.8%
  • CSS 2.1%
  • Other 0.4%