×
Copy
Open
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Vue.js の methods と computed
Slide 2
Slide 2 text
ショウノシオリ @shosho_egg ・株式会社 chatbox エンジニア ・PHP(Laravel)、Vue.jsなどを使ってます ・PHPカンファレンス関西2017&2018実行委員長
Slide 3
Slide 3 text
Vue.js の methods と computed って違うの?
Slide 4
Slide 4 text
Vue.js のscript要素 components: { … }, data: { … }, mounted: { … }, created: { … }, methods: { hoge(){ … } }, computed: { piyo(){ … } }, … 読み込む タイミングが違う 書き方はほぼ同じだけど、 何が違うの?
Slide 5
Slide 5 text
▷ methods ○ メソッド ○ メソッドなのでhtml上では () が必要 ○ 毎回呼び出す ○ キャッシュされない ▷ computed(算出プロパティ) ○ プロパティ ○ プロパティなのでhtml上では () なし ○ プロパティなのでgetter/setterが定義可 ■ デフォルトはgetterのみ ○ 値が変わらなければ呼び出されない ○ キャッシュされる 調べてみた。
Slide 6
Slide 6 text
JavaScriptのプロパティ ▷ データプロパティ ○ 値が格納される ▷ アクセサプロパティ ○ 値は持たず、getter/setterと呼ばれる関数を設定する。両方を設 定してもいいし、片方だけでもよい。 ■ getter:参照されたときに呼ばれる ■ setter:値を変更するときに呼ばれる プロパティには2種類。 必ずどちらかに分類でき、両方の性質を兼ね備えることはできない。 ちょっと 寄り道 computed はコレ
Slide 7
Slide 7 text
No content
Slide 8
Slide 8 text
▷ methods ○ メソッド ○ メソッドなのでhtml上では () が必要 ○ 毎回呼び出す ○ キャッシュされない ▷ computed ○ プロパティ ○ プロパティなのでhtml上では () なし ○ プロパティなのでgetter/setterが定義可 ■ デフォルトはgetterのみ ○ 値が変わらなければ呼び出されない ○ キャッシュされる
Slide 9
Slide 9 text
使い分けるならポイントは キャッシュ かな
Slide 10
Slide 10 text
どういう風に使い分けるのがいいか? ▷ 基本的に computed を使い、どうしても必要なときに は methods を使う ○ computed は依存関係にもとづいてキャッシュされるので、 中にdataプロパティがあった場合は変更を常にチェックして 再び処理が走る。 ○ methods はdataプロパティが変わっていても変わらなくて も、毎回処理が走る。 必要な時にだけ処理が走るので、無駄に処理が遅くなら ない。 Data を使って日時などを取得するときは、computed だ とキャッシュされてしまうので methods を使うべき。
Slide 11
Slide 11 text
その他注意するところ ▷ methods と computed で同じ名前を使わないこと ▷ 外部からの呼び出し時にも computed ではなく methods を使うべき
Slide 12
Slide 12 text
まとめ ▷ methods と computed の大きな違いはキャッシュの有無 ▷ 毎回呼び出す必要がないなら computed を使おう ▷ methods と computed で同じ名前は使わないようにしよ う ▷ watchedプロパティとの使い分け ▷ 「算出プロパティはどうやって動いているか」@kitak さんのスライド https://kitak.github.io/slides/170316-vue-meetup/# 今後勉強してみようかなぁ、と思っていること
Slide 13
Slide 13 text
参考 ▷ アクセサプロパティ https://numb86-tech.hatenablog.com/entry/2016/06/04/152 912 ▷ computedとmethodsの違い https://orizuru.io/blog/vue-js/search-function/ http://udomomo.hatenablog.com/entry/2017/12/11/213904 http://kazu22002.hatenablog.com/entry/2017/10/24/07000 0 ▷ 公式ドキュメント https://vuejs.org/v2/guide/computed.html#ad
Slide 14
Slide 14 text
Thanks! Any questions? You can find me at: @username
[email protected]