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]

続きを表示

関連記事

  • vueコンポーネントでvue-routerのページ制御を行う

    vueコンポーネントの処理でvue-routerのページ制御を行う方法を紹介します。vue-routerでページ遷移するときはrouter-linkのコンポーネントを使うことが多いですが、コンポーネン...


  • vueファイル(単一ファイルコンポーネント)をwebpackでビルド

    vueファイル(単一ファイルコンポーネント)をwebpackでビルドする手順を紹介します。バージョンは、Vue.jsは2.x、webpackは2.xです。わかりやすくするため、空のプロジェクトから出来...


  • Vue.js lessを使いwebpackでビルドする

    .vueファイル(単一ファイルコンポーネント)のstyleをcssではなくlessで実装して、webpackでビルドをします。vue-loaderのオプションにlessのloaderを追加します。


  • vue-routerを導入してSPAを作成する

    Vue.jsのプロジェクトにvue-routerを導入してシングルページアプリケーション(spa)を作成します。最初にvue-routerのパッケージをインストールします。router-linkはナビ...


  • vue-router webpackでページごとにファイルを分割する

    vue-routerでシングルアプリケーションを作成していると、ページ数が増えるにしたがって作成されるjsファイルのファイルサイズもどんどん増えていきます。ページごとにファイルを分割し、そのページがア...


  • Vue.js webpackでHot Module Replacementを行う

    開発を効率化するために、Hot Module Replacement(HMR)の設定を行います。Hot Module Replacementを設定しておけば、ブラウザの再読込は行わず、修正した箇所のみ...


  • Vue.js axiosをajaxライブラリとして導入する

    Vue.jsではajaxまわりの処理は用意されておらず、外部のライブラリを各自で自由に用意するようになっています。axiosの設定用にhttp.jsというファイルを作成します。エントリポイントのapp...


  • Vue.jsを学習する上で知っておきたいES2015の文法

    Vue.jsは公式ドキュメントを始め、ネット上のほとんどのサンプルがES2015(ES6)の表記で実装されています。Vue.jsで頻繁に使用するであろうES2015の文法を紹介します。objectの中...


  • Vue.js 独自のfilterを実装する

    Vue.jsで独自のfilterを実装して、各コンポーネントで使用できるようにします。コンポーネント内で定義することもできますが、今回はグローバルファンクションとして作成して、全てのコンポーネントで使...