TypeError: Vue 開発で null のプロパティ 'XXX' を読み取れません。どう対処すればよいですか?

王林
リリース: 2023-11-25 09:26:25
オリジナル
1210 人が閲覧しました

Vue开发中的TypeError: Cannot read property \'XXX\' of null,应该如何处理?

TypeError: Vue 開発で null のプロパティ 'XXX' を読み取れません。どう対処すればよいですか?

Vue.js フレームワークを導入した後、開発プロセス中にさまざまなエラーが発生することがよくあります。一般的なエラーの種類の 1 つは、型エラーである TypeError です。特に、null オブジェクトのプロパティを読み取ろうとすると、「TypeError: Cannot read property 'XXX' of null」というエラーが発生します。この記事では、このエラーの原因と対処方法について説明します。

まず具体的な例を見てみましょう。以下に示すように、Vue コンポーネントがあり、その中でデータ属性 data を使用するとします。

<template>
  <div>
    <p>{{ data.info }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      data: null
    };
  },
  mounted() {
    this.loadData();
  },
  methods: {
    loadData() {
      // 省略异步加载数据的代码
      // 假设数据加载成功后,将this.data赋值为一个包含info属性的对象
    }
  }
};
</script>
ログイン後にコピー

上記のコードでは、data という名前のデータ属性を定義し、その初期値 Set を null に設定します。次に、コンポーネントのマウントされたライフサイクル フック関数で、loadData メソッドを呼び出してデータを非同期的にロードし、ロードされたデータを this.data に保存します。

ただし、データをロードする前にコンポーネントのテンプレートでレンダリングがすでに開始されている場合は、TypeError が発生します。この時点では this.data の値はまだ null であり、その info 属性を読み取ろうとしているためです。

この問題を解決するには、いくつかの方法を試すことができます。

最初の方法は、テンプレートに条件付きレンダリングを追加することです。つまり、v-if 命令を使用してデータ オブジェクトが存在するかどうかを判断します。データが null の場合、data.info を含む p タグは表示されません。例は次のとおりです:

<template>
  <div>
    <p v-if="data">{{ data.info }}</p>
  </div>
</template>
ログイン後にコピー

上記のコードでは、v-if="data" を使用してデータが存在するかどうかを判断します。 data.info を含む p タグは、data が null でない場合にのみ表示されます。こうすることで、データが null の場合でも TypeError は発生しなくなります。

2 番目の方法は、データ属性のデフォルト値を使用することです。次のように、data 属性で最初の空のオブジェクトを定義できます。

data() {
  return {
    data: {}
  };
},
ログイン後にコピー

この方法では、データをロードする前であっても、this.data の値は null ではなく空のオブジェクトになります。したがって、data.info プロパティを読み取ろうとしても TypeError は発生しません。

3 番目の方法は、テンプレートで計算されたプロパティを使用することです。計算されたプロパティを通じて、データを判断して変換し、デフォルト値を持つオブジェクトを返すことができます。例は次のとおりです。

<template>
  <div>
    <p>{{ normalizedData.info }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      data: null
    };
  },
  computed: {
    normalizedData() {
      if (this.data) {
        return this.data;
      } else {
        return {
          info: ""
        };
      }
    }
  },
  mounted() {
    this.loadData();
  },
  methods: {
    loadData() {
      // 省略异步加载数据的代码
    }
  }
};
</script>
ログイン後にコピー

上記のコードでは、計算プロパティ NormalizedData を定義します。このプロパティは、this.data が存在するかどうかを判断して、対応するオブジェクトを返します。 this.data が存在する場合は this.data を返し、存在しない場合はデフォルト値を持つオブジェクトを返します。こうすることで、データをロードする前でも、normalizedData.info プロパティに通常どおりアクセスできます。

要約すると、Vue 開発で TypeError: Cannot read property 'XXX' of null エラーが発生した場合、次の処理方法を取ることができます: テンプレートで条件付きレンダリング (v-if) を使用する)、データ プロパティのデフォルト値を使用するか、テンプレートで計算されたプロパティを使用します。これらのメソッドにより、null オブジェクトのプロパティの読み取り試行を回避できるため、TypeError エラーが解決されます。状況に応じて、エラーを処理する適切な方法を選択することが重要です。

以上がTypeError: Vue 開発で null のプロパティ 'XXX' を読み取れません。どう対処すればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート