Pinia master course
  • 🍏Introduction
    • Why Pinia
      • Introduction & Project setup
      • Vuex VS Pinia
  • 🍎Essential of Pinia
    • Create Store, State, Action, Getters
    • Use store in vue component
      • [Optional] 구조분해는 왜 reactivity를 잃게 만들까?
      • 비동기 액션 생성하기
      • 로컬스토리지 사용하기
Powered by GitBook
On this page
  • action 사용하기
  • Action, getter 사용하기
  • 상태값 조회하기
  • storeToRefs
  1. Essential of Pinia

Use store in vue component

컴포넌트 내부에서 스토어 사용하기

action 사용하기

전 페이지에서 생성한 스토어를 SFC 내부에서 사용해봅니다. 임의의 컴포넌트를 생성하세요.

UserDataExample.vue

<template>
  <div>
    <button @click="fetchData">Fetch User Data</button>
    <p v-if="isUserLoggedIn">User is logged in</p>
  </div>
</template>

<script>
import { useUserStore } from '@/stores/userStore';

export default {
  setup() {
    const userStore = useUserStore();

    // Method to trigger the action
    const fetchData = () => {
      userStore.fetchUserData('123'); // Assuming '123' is the userId
    };

    return { 
      fetchData,
      isUserLoggedIn: userStore.isUserLoggedIn
    };
  },
};
</script>

Action, getter 사용하기

useStore.fetchUserData 와 같이 스토어에서 바로 action 값을 가져다가 사용하면 됩니다. getter도 마찬가지입니다.

상태값 조회하기

위 예제에서 setup 함수 내부에서 반환하는 isUserLoggedIn 는 userStore.isUserLoggedIn과 같이 스토어를 직접 참조합니다. 이렇게 구조분해를 사용하지 않는 경우 Pinia store에서 reactivity를 유지하기 때문에 아무런 문제가 없습니다.

storeToRefs

구조분해를 할 때는 Pinia에서 제공하는 storeToRefs를 사용해야 합니다.

import { storeToRefs } from 'pinia';
import { useUserStore } from '@/stores/userStore';

export default {
  setup() {
    const userStore = useUserStore();
    
    // Using storeToRefs to maintain reactivity of individual properties from the Pinia store
    const { userData, loading, error } = storeToRefs(userStore);

    return { userData, loading, error };
  },
};

getter와 action은 storeToRefs를 적용하지 않고 바로 사용합니다.

PreviousCreate Store, State, Action, GettersNext[Optional] 구조분해는 왜 reactivity를 잃게 만들까?

Last updated 1 year ago

🍎
use storeToRefs remain Ref
destructuring can't remain Ref