LoginSignup
2
2

More than 3 years have passed since last update.

Vue.jsでフォローボタンと、フォロ数、フォロワー数の連携を実装する

Last updated at Posted at 2019-08-24

follow0830.gif

フォロー機能はLaravelと、Vue.jsで実装してる
フォローボタンと、フォロ数、フォロワー数の連携以外の部分は下記を見れば実装することができる。
https://www.youtube.com/watch?v=ImtZ5yENzgE

フォロー機能については主に下記2点が大事と思う
1.ユーザー登録機能がないとできない。
  - Laravelの認証機能で簡単に実現できる
2.DBの設計では多対多であるユーザーテーブルと、プロファイルテーブルを持つことが必要。

npmの準備

LaravelはVue.jsが標準搭載されていまして、前準備はNode.jsをインストールしてnpmの使用
ができるようにするだけ。

  • node.jsとnpmのインストール
   sudo yum install nodejs npm --enablerepo=epel
  • npmのバージョンアップ
   npm install -g npm 
  • Vuexのインストール
     コンポーネント間での通信(兄弟コンポーネント)を実現するのにVuexを必要とする。
   npm install vuex --save
  • 依存パッケージをインストール
   cd /path/to/laravel /* Laravelルートディレクトリへ移動 */
   npm install 
  • フロントエンドのビルド
   cd /path/to/laravel /* Laravelルートディレクトリへ移動 */
   npm run watch

以上でLaravel上のVue.jsがちゃんと動くはず!

ディレクトリの構成

  • Laravelのresourcesディレクトリの構成

スクリーンショット 2019-08-24 16.09.06.png

  • views/profiles/index.blade.phpはフォローボタンと、フォロ数、フォロワー数を表示する
  • js/app.jsはVueコンストラクタからインスタンスを生成する
  • js/components/follow-button.vueはフォローボタンの単一ファイルコンポーネント
  • js/components/followers.vueはフォロワー数の単一ファイルコンポーネント
  • js/components/following.vueはフォロー数の単一ファイルコンポーネント
  • js/store/store.jsはアプリケーションの 状態(state) を保持するVuexを取り込む

ソースコードはgithubにアップする。後ろの部分にリンクを貼る。

Vuex

スコープ関係で他コンポーネントにthisで参照する事ができないが、Vuexを使うことでコンポーネントの間で同一のデータを共有することが出来る。特に非親子コンポーネント間の通信はストアVuexを使わないと混雑になる。
js/store/store.jsについて詳しく説明する

store.js
スクリーンショット 2019-08-24 16.58.58.png

15行目followUserメソッドはフォローボタンがクリックされた時のアクション、VuexではStoreの状態を変えるactionはすべてstore自身の中にないといけないため、フォローボタンのコンポーネントに書いていない。

16行目axios.postはaxios(Promise)で非同期通信を行ってる。ここでサーバーにフォローと、フォローの解除を行う処理してる。

17行目はPromiseのthen()を使うコールバック処理、成功した場合は「true」を25行目.thenに渡して、フォローと、フォローの解除をした後のフォロ数、フォロワー数を数えてストアに反映させる。

GitHub
https://github.com/iwaoo/laravel_login

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2