ホームページ >ウェブフロントエンド >Vue.js >Vue エラー: 計算された属性は動的計算に正しく使用できません。解決方法は?

Vue エラー: 計算された属性は動的計算に正しく使用できません。解決方法は?

WBOY
WBOYオリジナル
2023-08-27 09:44:05994ブラウズ

Vue エラー: 計算された属性は動的計算に正しく使用できません。解決方法は?

Vue エラー: 計算された属性は動的計算に正しく使用できません。解決方法は?

Vue を使用した開発プロセスでは、動的な計算関数を実装するために computed 属性がよく使用されます。計算プロパティは Vue の非常に重要な部分であり、Vue インスタンスのプロパティを計算して新しい値を返すことができます。ただし、場合によっては問題が発生し、計算された属性が正しく使用できない場合があるため、問題を見つけて解決する必要があります。

以下の簡単な例を見てみましょう。ユーザーのリストがあり、ユーザーの年齢に基づいて年齢グループを計算する必要があるとします。

<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>

上記のコードでは、次のように計算しました。 ageRange メソッドは、年齢範囲を計算するために属性で定義されています。ただし、このコードを実行しようとすると、エラーが表示されます:

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

このエラーは、計算されたプロパティで定義したメソッドにセッターがないことを意味します。 Vue では、セッターを定義することでこの問題を解決できます。コードを変更して、computed 属性を use メソッドに変更できます。

<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>

上記のコードでは、computed をメソッドに変更し、年齢グループを動的に計算する機能を実装するメソッドを定義しました。これによりエラーが回避され、同じ機能が維持されます。

メソッドの使用に加えて、watch 属性を使用してプロパティを動的に計算することもできます。以下は、watch 属性の使用例です。

<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>

上記のコードでは、watch 属性を使用して userList 属性の変更をリッスンし、変更があった場合に年齢範囲を計算し、ageRange を更新します。 getAgeRange メソッドを通じて属性を取得します。

要約すると、動的計算に計算属性を使用するときに、正しく使用できない問題が発生した場合は、メソッドを使用するか、属性を監視して同じ機能を実現することができます。これによりエラーが解決され、コードの機能は変更されません。この記事が Vue のエラー問題の解決に役立つことを願っています。

以上がVue エラー: 計算された属性は動的計算に正しく使用できません。解決方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。