Vue アプリケーションで vue-router を使用すると、「TypeError: null のプロパティ 'yyy' を読み取れません」というエラー メッセージがコードに表示されることがあります。これは、ページのルーティング パスが間違っているか、vue-router を使用するときに一部のルーティング パラメーターが正しく渡されていないことが原因で発生するエラーです。この記事では、この問題の原因と解決策を紹介します。
原因
「TypeError: Cannot read property 'yyy' of null」は、vue-router の使用時に表示されます。これは通常、次の理由によって発生します。
1. ルーティングpath エラー: vue-router を使用すると、不正なルーティング パスが原因で存在しないページまたは未定義のページにアクセスされるか、一部のパラメーターがルーティングで渡されないため、コード実行エラーが発生します。
2. コンポーネントの内部コード エラー: コンポーネント内でコードを記述するときに、未定義の変数や関数の参照、または null 値を持つ一部の属性などのエラーが発生することがあります。
3. コンポーネントのインスタンス化エラー: コンポーネントがインスタンス化されるときに、渡されたパラメーターの型が正しくないか、パラメーターが null 値であるため、コード実行エラーが発生します。
解決策
さまざまな理由により、この問題を解決するためにさまざまなソリューションを採用できます。
1. ルーティング パス エラー
「TypeError: Cannot read property 'yyy' of null」などのエラー メッセージが表示された場合は、ページのルーティング パスが正しいか確認する必要があります。 。まず、ルーティング設定が正しいかどうか、および対応するルートに対応する正しいコンポーネントが設定されているかどうかを確認できます。
2 番目に、ページ パラメーターが正しく渡されているかどうかを確認する必要があります。パラメータを渡すときは、渡されたパラメータの型が正しいかどうか、null かどうかなどに注意する必要があります。コンポーネント内でパラメータを渡すときは、小道具を使用して次のように定義できます:
<template> <div> <h1>{{title}}</h1> </div> </template> <script> export default { name: 'Article', props: { title: String, }, }; </script>
ルーティング設定でパラメータを渡すために小道具を使用します:
const routes = [ { path: '/article/:id', name: 'Article', component: Article, props: true, } ]
2. コンポーネントの内部コードのエラーコンポーネント
#コンポーネント内で「TypeError: null のプロパティ 'yyy' を読み取れません」というエラー メッセージが表示された場合は、コンポーネントの内部コードにエラーがないか確認する必要があります。まず、変数または関数が正しく定義されているかどうかを確認する必要があります。サードパーティ製のライブラリを使用している場合は、ライブラリファイルが正しく導入されているかを確認する必要があります。 2 番目に、コンポーネント間のデータ転送が正しいかどうかを確認する必要があります。 Vue では、データ転送と管理にイベント バスまたは Vuex を使用できます。イベント バスは、Vue インスタンスの $emit と $on を使用して、イベントを配信およびリッスンすることができます (例:// Event Bus.js import Vue from 'vue'; export const EventBus = new Vue(); // Component 1.js import { EventBus } from './Event Bus.js'; export default { name: 'Component1', created: function() { EventBus.$on('event-name', this.handleEvent); }, methods: { handleEvent: function(data) { console.log('Received data:', data); }, } }; // Component 2.js import { EventBus } from './Event Bus.js'; export default { name: 'Component2', created: function() { EventBus.$emit('event-name', 'Hello World'); }, };
// store.js import Vue from 'vue'; import Vuex from 'vuex'; Vue.use(Vuex); const store = new Vuex.Store({ state: { message: 'Hello World', }, mutations: { setMessage: (state, payload) => { state.message = payload; }, }, actions: { updateMessage: ({commit}, payload) => { commit('setMessage', payload); }, } }); export default store; // Component 1.js import { mapState } from 'vuex'; export default { name: 'Component1', computed: { ...mapState(['message']), }, }; // Component 2.js import { mapActions } from 'vuex'; export default { name: 'Component2', methods: { ...mapActions(['updateMessage']), handleClick: function() { this.updateMessage('Updated Message'); }, }, };
<template> <div> <component-a v-if="isComponentAActive"></component-a> <component-b v-else></component-b> </div> </template> <script> import ComponentA from './ComponentA.vue'; import ComponentB from './ComponentB.vue'; export default { name: 'App', components: { ComponentA, ComponentB, }, data: function() { return { isComponentAActive: true, }; }, }; </script>
以上がVue アプリケーションで vue-router を使用するときに「TypeError: Cannot read property 'yyy' of null」という問題を解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。