我有以下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 getter会在Vuex存储的初始化正确设置user之前返回null值.

最初可以将user设置为空对象{}.这样,Vue组件模板中的user.first_name将是undefined,模板中不会呈现任何内容.


或者,可以向包含div的元素添加v-if="user"属性:

<div v-if="user">
  {{ user.first_name }}
</div>

这样,在mapped user属性的值为truthy之前,不会渲染div及其内容.这将阻止Vue在正确设置user之前try 访问user.first_name.

Vue.js相关问答推荐

为什么我的数组在 onBeforeMount 函数中不为空,但在 onMounted 函数中为空

如何在Vue3中使用vuechartjs 5.2从父组件更新图表

Vue 3组合式API如何测试是否发出正确的事件

Vue 2 如何在全局函数中返回观察者

vue3 + pinia:如何从?store 中获取一个值

vite - 具有相对assets资源 路径的子页面

Vue cli 3项目,图像路径中的动态src不起作用

Webpack 你可能需要一个合适的加载器来处理这个文件类型

当前端和后端位于虚拟 docker 网络中时,如何使用 axios 寻址后端主机

如何在某些异步数据(在 Vuex 存储中)加载之前防止任何路由?

Vue&TypeScript:在项目目录外的 TypeScript 组件中实现导入时如何避免错误 TS2345?

使用 vue-test-utils 配置过滤器

Vue路由保持活动和挂载行为

vue-test-utils:无法覆盖属性 $route,这通常是由于插件将该属性添加为只读值

vuejs挂载生命周期未触发

如果我刷新我的网页,Vuex store是空的

根据nuxt中的url参数动态加载组件

mount() 仅在组件 Vue.js 上运行一次

如何访问通用 javascript 模块中的当前路由元字段

v-bind:class 的 Vue.js 计算(computed)属性