私は以下を持っていますNavigation.vue
コンポーネント:
<template>
<div>
{{user.first_name}}
</div>
</template>
<script>
import { mapActions, mapGetters } from 'vuex'
export default {
name: 'hello',
methods: {
...mapActions(['myAccount'])
},
mounted: function () {
if (localStorage.getItem('access_token')) {
this.myAccount()
}
},
computed: {
...mapGetters(['user'])
}
}
</script>
このコードは次を返します:
[Vue warn]: Error in render function: "TypeError: Cannot read property 'first_name' of null"
奇妙なことに、ユーザーの名が正しく表示されています。何が悪いのですか?
Vuexストアのuser
が最初はnull
に設定されているため、このエラーが発生する可能性が高くなります。 Vueコンポーネントにマップされたuser
ゲッターは、Vuexストアへの初期化が適切にnull
を設定する前に、そのuser
値を返します。
最初にuser
を空のオブジェクト{}
に設定できます。このように、Vueコンポーネントのテンプレートのuser.first_name
はundefined
になり、テンプレートには何もレンダリングされません。
または、div
要素にv-if="user"
属性を追加することもできます。
<div v-if="user">
{{ user.first_name }}
</div>
このように、マップされたdiv
プロパティの値が真になるまで、user
とその内容はレンダリングされません。これにより、Vueがuser
が適切に設定されるまでuser.first_name
にアクセスしようとしなくなります。
私にとってうまくいった解決策は、ユーザーをnullではなく空の文字列' '
に設定することでした。
const state = {
user: ''
}