【Vue3】reactiveを使って状態管理しよう!

Vue.js

みなさんこんにちは、現役エンジニアのサメハックです

未経験からWebエンジニアに転職し、
正社員として5年働いたのちフリーランスとして独立しました。

Vue.jsの解説シリーズです。

今回はreactiveを使って状態管理する方法について学んでいきましょう!

駆け出しエンジニアや未経験の方、
また新入社員を指導する先輩社員にとっても
わかりやすいように解説していきます!

この記事を読むと・・・
  • reactiveを使って状態管理ができる
  • サービスファイルで状態管理ができる
Vue.jsを使いこなそう!

アプリのセットアップ

ターミナルで以下を実行してアプリをセットアップします

npm install -g @vue/cli
vue create my-vue-app
cd my-vue-app
npm run serve
touch src/my-service.ts 

http://localhost:8080にアクセス

touchコマンドはMac用のファイル作成コマンドだよ!
Windowsの方は右クリックでファイル作成してね!

reactiveについて

reactiveはオブジェクトや配列をリアクティブにするために使用されます。

コンポーネント側からreactiveのプロパティを指定すると
値の変化を検知して自動でDOMが書き換わります。

reactiveを使う構文

import { reactive } from "vue"; // Vueのreactive関数をインポート

// リアクティブな状態オブジェクトを作成
// reactive関数は、オブジェクトをリアクティブにし、状態が変化したときにVueコンポーネントが自動的に再レンダリングされるようにします
const state = reactive({ key: 初期値 });
値の呼び出しは state.key だけで特別な購読設定などは不要だよ!
値の書き換えは通常のオブジェクトと同じだよ!

reactiveを使ってサービスファイルで状態管理しよう!

このように動くサンプルを作るよ!

my-service.ts

import { reactive } from "vue"; // Vueのreactive関数をインポート

// リアクティブな状態オブジェクトを作成
// reactive関数は、オブジェクトをリアクティブにし、状態が変化したときにVueコンポーネントが自動的に再レンダリングされるようにします
export const state = reactive({
  userName: "サメハック", // 初期のユーザー名
  job: "エンジニア", // 初期の仕事
});

// ユーザー名を更新する関数
// この関数は、引数として受け取った名前をstate.userNameに設定します
export const updateUserName = (name) => {
  state.userName = name; // stateオブジェクトのuserNameプロパティを新しい名前に更新
};

// ユーザー名をクリアする関数
// この関数は、state.userNameを空の文字列に設定します
export const clearUserName = () => {
  state.userName = ""; // stateオブジェクトのuserNameプロパティを空の文字列に更新
};

App.vue

<template>
  <!-- ユーザー名を表示する部分 -->
  <!-- myService.state.userName からユーザー名を取得して表示 -->
  <div>なまえ:{{ myService.state.userName }}</div>

  <!-- 仕事を表示する部分 -->
  <!-- myService.state.job から仕事を取得して表示 -->
  <div>しごと:{{ myService.state.job }}</div>

  <!-- ボタンをクリックしてユーザー名を「ねこハック」に更新 -->
  <!-- @click ディレクティブでクリックイベントを監視 -->
  <!-- myService.updateUserName('ねこハック') を実行 -->
  <button @click="myService.updateUserName('ねこハック')">名前書き換え</button>

  <!-- ボタンをクリックしてユーザー名をクリア -->
  <!-- @click ディレクティブでクリックイベントを監視 -->
  <!-- myService.clearUserName を実行 -->
  <button @click="myService.clearUserName">名前をクリア</button>
</template>

<script setup>
// my-service.ts からエクスポートされたモジュール全体を myService としてインポート
// このファイル内で myService という名前でサービスを利用可能にする
import * as myService from "./my-service.ts";
</script>

これでサービスファイルで状態管理することができたよ!
ちなみにAngularのような購読解除処理は不要だよ!

まとめ

  • reactiveはオブジェクトや配列をリアクティブにするために使用される
  • reactiveのプロパティを指定すると値の変化を検知して自動でDOMが書き換わります。
  • 値の書き換えは通常のオブジェクトと同じ※valueなどの指定は不要
  • 特別な購読・購読解除処理は不要

満足いただけたら、1クリックなのでSNSフォローしてもらえると嬉しいです🦈

タイトルとURLをコピーしました