自己紹介
氏名:田原一樹
出身地:大阪
血液型:B型
所属:レアジョブ/App・UXチーム
フロントエンドエンジニア
本日のお話
その前に少しだけ m(_ _)m
これらを目標・理念として掲げ、
Edtech企業として
活動しております。
コチラ
レッスンルーム
skypeからの脱却の為、
レッスンルームへ移行するにあたりWeb版では
使用しAppを構築しております。
本題に戻りますm(_ _)m
本日のお話
そもそもMixinってどんな機能?
ミックスイン (mixin) は、
Vue コンポーネントに再利用可能で柔軟性のある機能を持たせるための方法です。
ミックスインオブジェクトは
任意のコンポーネントオプションを含むことができます。
コンポーネントがミックスインを使用するとき、ミックスインの全てのオプションは
コンポーネント自身のオプションに”混ぜられ”ます。
// ミックスインオブジェクトを定義
var myMixin = {
created: function () {
this.hello()
},
methods: {
hello: function () {
console.log('hello from mixin!')
}
}
}
// このミックスインを使用するコンポーネントを定義
var Component = Vue.extend({
mixins: [myMixin]
})
var component = new Component() // => "hello from mixin!"
※イメージ
基本的に各コンポーネントが必要とする機能と
それに紐付いたstore群を作成しmodule化しております。
しかし…
.
├── index.html
├── js
│ │
│ ├── app.ts
│ ├── router
│ │ └── index.ts
│ ├── store
│ │ ├── index.ts
│ │ └── modules
│ │ ├── chatbox.ts
│ │ ├── checkVoiceModal.ts
│ │ ├── envCheck.ts
│ │ ├── global.ts
│ │ ├── headerBalloons.ts
│ │ ├── lesson.ts
│ │ ├── lessonMemo.ts
│ │ ├── lessonRoom.ts
│ │ ├── loadingSentence.ts
│ │ ├── material.ts
│ │ ├── modal.ts
│ │ ├── phrase.ts
│ │ ├── preparation.ts
│ │ ├── stream.ts
│ │ ├── student.ts
│ │ └── video.ts
│ └── vue
│ ├── Root.vue
│ ├── mixins
│ │ ├── global.ts
│ │ └── modal.ts
│ ├── page
│ │ ├── Lesson.vue
│ │ ├── LessonFinish.vue
│ │ └── Preparation.vue
│ └── partials
│ ├── lessonRoom
│ │ ├── Banana.vue
│ │ ├── Chatbox.vue
│ │ ├── ChatboxChat.vue
│ │ ├── ChatboxMemo.vue
│ │ ├── Header.vue
│ │ ├── HeaderAlerts.vue
│ │ ├── HeaderTimer.vue
│ │ ├── Himawari.vue
│ │ ├── Loading.vue
│ │ ├── Material.vue
│ │ ├── MaterialDisplay.vue
│ │ ├── MaterialSelect.vue
│ │ ├── MyTour.vue
│ │ ├── ProgressBar.vue
│ │ ├── Video.vue
│ │ ├── VideoLocalControl.vue
│ │ ├── VideoMessage.vue
│ │ ├── VideoRemoteControl.vue
│ │ └── headerBalloons
│ │ ├── CheckVoice.vue
│ │ ├── Help.vue
│ │ ├── Inquiry.vue
│ │ └── Phrase.vue
│ └── preparation
│ └── CheckResult.vue
└── sass
※イメージ
※イメージ
※イメージ
紐づく対の機能とコンポーネントの関係だけでなく、別のコンポーネント(はたまた、どのコンポーネント)からでもある特定の機能を使いたい場面が発生している。
そこで共通化の為、これまではMixinを使用しており、
どのコンポーネントからでも呼ぶことができるstoreを作り、各コンポーネントに設定されていた。
なにが起きたか
そこで登場!
プラグマン
storeのプラグイン化
→カスタムディレクティブにstoreを追加
Pluginによる恩恵
Mixin
plugin
メリット
メリット
デメリット
デメリット
複雑化しやすい
→prefixでのルール化等、管理しないと
mergeストラテジに気をつけないといけない
→命名に注意
コンポーネント単位でOverrideできる。
→ globalに登録すれば、globalでも対応可能。
Text
カスタムディレクティブへの登録時にprefixが付けられる
どこからでも呼べるが、
コンポーネント内への設定には記法に注意
prefixがつくので、同一メソッド名でも競合は起きない
まとめ
嘘です…
まとめ
参考
ご清聴ありがとうございました!