Home >Web Front-end >Vue.js >Vue error: The computed attribute cannot be used correctly for dynamic calculation. How to solve it?

Vue error: The computed attribute cannot be used correctly for dynamic calculation. How to solve it?

WBOY
WBOYOriginal
2023-08-27 09:44:05994browse

Vue error: The computed attribute cannot be used correctly for dynamic calculation. How to solve it?

Vue error: The computed attribute cannot be used correctly for dynamic calculation. How to solve it?

In the development process using Vue, the computed attribute is often used to implement some dynamic calculation functions. The computed property is a very important part of Vue. It can calculate the properties of the Vue instance and return a new value. However, sometimes we encounter some problems and the computed attribute cannot be used correctly. At this time, we need to find out the problem and solve it.

Let’s look at a simple example below. Suppose we have a list of users, and we need to calculate their age group based on the user’s age:

<template>
  <div>
    <ul>
      <li v-for="user in userList" :key="user.id">
        {{ user.name }} - {{ user.age }} - {{ ageRange(user.age) }}
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      userList: [
        { id: 1, name: '张三', age: 18 },
        { id: 2, name: '李四', age: 25 },
        { id: 3, name: '王五', age: 35 },
      ],
    };
  },
  computed: {
    ageRange(age) {
      if (age < 20) {
        return '青少年';
      } else if (age >= 20 && age <= 30) {
        return '青年';
      } else {
        return '中年';
      }
    },
  },
};
</script>

In the above code, we computed An ageRange method is defined in the attribute to calculate the age range. However, when we try to run this code, an error will appear:

[Vue warn]: Computed property "ageRange" was assigned to but it has no setter.

This error means that the method we defined in the computed property does not have a setter. In Vue, we can solve this problem by defining a setter. We can modify the code and change the computed attribute to the usage method:

<template>
  <div>
    <ul>
      <li v-for="user in userList" :key="user.id">
        {{ user.name }} - {{ user.age }} - {{ getAgeRange(user.age) }}
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      userList: [
        { id: 1, name: '张三', age: 18 },
        { id: 2, name: '李四', age: 25 },
        { id: 3, name: '王五', age: 35 },
      ],
    };
  },
  methods: {
    getAgeRange(age) {
      if (age < 20) {
        return '青少年';
      } else if (age >= 20 && age <= 30) {
        return '青年';
      } else {
        return '中年';
      }
    },
  },
};
</script>

In the above code, we changed computed to methods and defined a method to implement the function of dynamically calculating the age group. This avoids errors and maintains the same functionality.

In addition to using methods, we can also use the watch attribute to dynamically calculate properties. The following is an example of using the watch attribute:

<template>
  <div>
    <ul>
      <li v-for="user in userList" :key="user.id">
        {{ user.name }} - {{ user.age }} - {{ ageRange }}
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      userList: [
        { id: 1, name: '张三', age: 18 },
        { id: 2, name: '李四', age: 25 },
        { id: 3, name: '王五', age: 35 },
      ],
      ageRange: '',
    };
  },
  watch: {
    userList: {
      handler(newVal) {
        this.ageRange = this.getAgeRange(newVal.age);
      },
      deep: true,
    },
  },
  methods: {
    getAgeRange(age) {
      if (age < 20) {
        return '青少年';
      } else if (age >= 20 && age <= 30) {
        return '青年';
      } else {
        return '中年';
      }
    },
  },
};
</script>

In the above code, we use the watch attribute to listen for changes in the userList attribute, and when it changes, calculate the age range and update the ageRange attribute through the getAgeRange method.

To summarize, when using computed attributes for dynamic calculations, if you encounter problems that cannot be used correctly, you can try to use methods or watch attributes to achieve the same function. This can solve the error and keep the functionality of the code unchanged. I hope this article will be helpful in solving Vue error problems.

The above is the detailed content of Vue error: The computed attribute cannot be used correctly for dynamic calculation. How to solve it?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn