zukucode
主にWEB関連の情報を技術メモとして発信しています。

Vuex 厳格(strict)モードでエラーになるよくある原因

Vuexの厳格(strict)モードでエラーになってしまう原因でよくあるパターンです。

配列をソートする

stateに格納した配列をソートして表示するときに、stateの値をcomputedgettersでそのままソートするとエラーになります。

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]

関連記事

  • Vuex stateを作成して各コンポーネントで参照する

    Vue.jsにVuexを導入するでVuexの導入が完了しました。実際にstoreを作成して、各コンポーネントでその値を参照できるようにします。最初にstoreを作成します。mutations.jsにs...


  • Vuex mutationでstateの値を変更する

    Vuex stateを作成して各コンポーネントで参照するでstateを作成して各コンポーネントで参照できるようになりました。stateはmutationの処理でしか変更できません。コンポーネントからm...


  • Vuex moduleに定義したstateをコンポーネントで簡単に取得する

    Vuexのモジュールに定義したstateを各コンポーネントで参照する方法を紹介します。以下のようにmoduleが定義されているとします。各コンポーネントではthis.$store.state.モジュー...


  • Vuexとaxiosを連携する

    Vuex actionでローディングアイコンを表示するで、actionの処理でローディングの表示非表示を制御するmutationを実行するようにしました。ajaxの処理が増えるたびに同じmutatio...


  • Vuex モジュールのactionの処理で別モジュールのactionをコールする

    Vuexのモジュール内のactionの処理で別モジュールのactionをコールする方法を紹介します。ルートのactionの場合、moduleで定義したactionをコールする場合は、以下のようにモジュ...


  • Vuex actionでローディングアイコンを表示する

    Vuex actionの処理でaxiosでajaxを行うでactionの処理を実装しました。actionでajaxを行うときにローディングアイコンを表示させます。Vuexのstoreにloadingの...


  • Vuex actionの処理で別のactionをコールする

    Vuexのactionの処理で別のactionをコールする方法を紹介します。第一引数のcontextを受取り、dispatchメソッドをコールします。dispatchメソッドの第一引数はコールしたいa...


  • Vuex actionの処理でaxiosでajaxを行う

    Vue.js axiosをajaxライブラリとして導入するでVue.jsにaxiosを導入しました。今回は、Vuexのactionでaxiosのライブラリを使ったajaxの処理を行います。最初にaja...


  • Vuex actionでの非同期処理をasync/awaitの実装をする

    Vuexのactionではajaxなどの非同期処理を実装しますが、非同期処理をasync,awaitで実装する方法を紹介します。ファンクションを定義する箇所にasyncを追加しておけば普通にawait...


  • Vue.jsにVuexを導入する

    Vuexを導入する手順の作業メモです。Vuexを利用することにより、各コンポーネントで保持していたデータをstateにまとめられるので、ある程度規模が大きくなっても耐えられるプログラムを作成できます。...