Vuex 厳格(strict)モードでエラーになるよくある原因
Vuex
の厳格(strict)モードでエラーになってしまう原因でよくあるパターンです。
配列をソートする
state
に格納した配列をソートして表示するときに、state
の値をcomputed
やgetters
でそのままソートするとエラーになります。
computed: {
sortedList () {
return this.list.sort((val1, val2) => val1 > val2);
}
}
原因
sort
処理は自身の値も変更されてしまいます。
const arr1 = [3, 1, 2];
const arr2 = arr1.sort(sortFunc); // 昇順にソート
// arr1も変更される
console.log(arr1); // [1, 2, 3]
console.log(arr2); // [1, 2, 3]
const arr1 = [3, 1, 2];
arr1.sort(sortFunc); // 昇順にソート
console.log(arr1); // [1, 2, 3]
対処法
ソートする配列をコピーすることにより、state
のデータは変更されないようにします。
以下はslice()
でコピーをしています。
const arr1 = [3, 1, 2];
const arr2 = arr1.slice().sort(sortFunc); // 昇順にソート
// arr1はそのまま
console.log(arr1); // [3, 1, 2]
console.log(arr2); // [1, 2, 3]