计算 属性 中的状态操作在组件加载时产生控制台错误

Operations on state in computed property yields console error on component load

我正在将常规 JavaScript 函数(splitjoin)应用于计算的 属性,它本身接收一个状态变量。

但是我在安装组件时遇到 Cannot read property 'split' of undefined" 错误,因为那时我计算的 属性 user 暂时还是空的。

有什么解决办法吗?

<template>
  <div>
    {{ userDob }}
  </div>
</template>

<script>
import { mapState } from "vuex"

export default {
  computed: {
    ...mapState({
      user: state => state.dashboard.user || {}
    }),
    userDob() {
      return this.user.date_of_birth.split("-").reverse().join("-")
    }
  }
}
</script>

方法一

您可以在 Vuex 中为对象设置默认值,以便它始终可以使用:

user: {
  date_of_birth: "01-01-1970"
}

方法二

您可以在获取数据时只显示一个空字符串:

userDob() {
  try {
    return this.user.date_of_birth.split("-").reverse().join("-")
  }
  catch(error) {
    return ""
  }
}

您可以将 v-if 指令添加到 div 元素,其中包含计算出的 属性。

<template>
  <div v-if="user">
    {{ userDob }}
  </div>
</template>

The directive v-if is used to conditionally render a block. The block will only be rendered if the directive’s expression returns a truthy value.

参考:https://vuejs.org/v2/guide/conditional.html

真实值:https://developer.mozilla.org/en-US/docs/Glossary/Truthy