공부/Vue

[Vue] Components & pinia 실습

래울 2024. 3. 11. 10:46

각 페이지는 여러개의 컴포넌트들로 나눌 수 있음

 

/components 에 자식 파일 생성

 

- HomeView.vue

<script setup>
import {ref} from "vue";
import {useUserInfoStore} from "@/stores/counter";
import HomeChild from "@/components/HomeChild.vue";
const userInfoStore = useUserInfoStore();
</script>
<template>
  <h1>Home</h1>
  <div>count: {{userInfoStore.age }}</div>
  <button @click="userInfoStore.changeAge(9)">나이를 줄이자</button>
  <HomeChild/>
</template>

 

- HomeChild.vue

<script setup>
import GrandChild from "@/components/GrandChild.vue";
import {useUserInfoStore} from "@/stores/counter";
const userInfoStore = useUserInfoStore();

</script>
<template>
    <h2>HomeChild</h2>
    <p>{{ userInfoStore.name }}</p>
    <button @click="userInfoStore.changeName('TEST')">이름 변경</button>
    <GrandChild/>
</template>

 

- GrandChild.vue

<script setup>
import {useUserInfoStore} from "@/stores/counter";
const userInfoStore = useUserInfoStore();
</script>
<template>
    <h2>GrandChild</h2>
    <button @click="userInfoStore.changeAge(1);">한살로 돌아가자</button>
</template>

 

- /stores/counter.js

import { ref, computed } from 'vue'
import { defineStore } from 'pinia'

export const useUserInfoStore = defineStore('userStore', ()=>{
  const name = ref("테스트");
  const age = ref(10);
  function changeName(newName){
    name.value = newName;
  }

  function changeAge(newAge){
    
    age.value = newAge;
  }
  return { name, age, changeAge, changeName}
})