Search code examples
vue.jsvuejs2computed-properties

Side-effects-in-computed-properties


I want to avoid having side effects in my code, but I don't know how to fix these, does some one can help?

    computed: {
        sumarVerduras(){
          this.totalVerduras = 0;
            for( const verdura of this.verduras){
              this.totalVerduras = this.totalVerduras + verdura.cantidad
            } return this.totalVerduras;
        }
      }

It work as I want but side effect is there

Module Warning (from ./node_modules/eslint-loader/index.js):
error: Unexpected side effect in "sumarVerduras" computed property (vue/no-side-effects-in-computed-properties) at src\App.vue:53:7:
  51 |   computed: {
  52 |     sumarVerduras(){
  53 |       this.totalVerduras = 0;
     |       ^
  54 |         for( const verdura of this.verduras){
  55 |           this.totalVerduras = this.totalVerduras + verdura.cantidad
  56 |         } return this.totalVerduras;


error: Unexpected side effect in "sumarVerduras" computed property (vue/no-side-effects-in-computed-properties) at src\App.vue:55:11:
  53 |       this.totalVerduras = 0;
  54 |         for( const verdura of this.verduras){
  55 |           this.totalVerduras = this.totalVerduras + verdura.cantidad
     |           ^
  56 |         } return this.totalVerduras;
  57 |     }
  58 |   }

Solution

  • You should not edit any Vue component's data in computed property. Here you modify this.totalVerduras, which is considered as Vue's component data.

    You can change to:

    computed: {
      sumarVerduras() {
        let totalVerduras = 0;
        for (const verdura of this.verduras) {
          totalVerduras = totalVerduras + verdura.cantidad
        } 
        return totalVerduras;
      }
    }