🐕
[Vue]methodsでsortしたitemsをcomputedに検知させる
はじめに
本記事は、筆者による理解の復習・確認やアウトプットの練習のために書いております。
間違った解釈等ございましたら、ご指摘いただけますと幸いです。
結論
methods で sort するのではなくて、computed 側で sort
する。
できた例
<script>
export default {
computed: {
fugafuga() {
return this.items.sort("処理") // sortされた状態のitemsが取得できる
}
},
methods: {
hogehoge() {
//
}
}
}
</script>
できなかった例
<script>
export default {
computed: {
fugafuga() {
return this.items // hogehoge()でsortしたはずなのに、sort前のitemsが取れてしまう
}
},
methods: {
hogehoge() {
this.items.sort("処理")
}
}
}
</script>
背景
sort する前の段階で methods()で色々加工した上でソートをする必要があった。
sort をした時にてっきり、変更を検知してくれるものだと思っていた。
Vue は画面の更新もトリガするために、監視された配列の変更メソッドを抱合 (wrap) します。
抱合されたメソッドは次のとおりです:
push()
pop()
shift()
unshift()
splice()
sort()
reverse()
引用
疑問点
なぜ sort をした時に変更検知されなかったのか
追記
sort()
は元の配列を変更する破壊的変更のため、配列を複製し、その配列を sort するのが好ましいです(コメントいただいた方、ありがとうございます)
this.items.slice().sort("処理")
Discussion
2点気になったのでコメントします
コメントありがとうございます!
参考にさせていただきます