みなさんこんにちは、現役エンジニアのサメハックです
未経験から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
touchコマンドはMac用のファイル作成コマンドだよ!
Windowsの方は右クリックでファイル作成してね!
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のような購読解除処理は不要だよ!
ちなみにAngularのような購読解除処理は不要だよ!
まとめ
- reactiveはオブジェクトや配列をリアクティブにするために使用される
- reactiveのプロパティを指定すると値の変化を検知して自動でDOMが書き換わります。
- 値の書き換えは通常のオブジェクトと同じ※valueなどの指定は不要
- 特別な購読・購読解除処理は不要
満足いただけたら、1クリックなのでSNSフォローしてもらえると嬉しいです🦈