Vue:在计算属性中避免TypeError的最佳方法是什么

时间:2019-02-18 11:12:09

标签: javascript vue.js

想象一下,您在商店中有一些嵌套状态。例如

state: {
    some: {
        really: {
             deep: true
        }
    }
}

然后将其映射到组件中,并希望为快捷方式或其他内容设置一些快速计算的值:

computed: {
    // pls don't tell me that I can map only `deep` 
    // it's not the point of this question
    ...mapState('some'),
    isDeep() {
        return this.some.really.deep
    }
}

这里的问题是,在任何级别上,状态都可能是null而不是对象。例如。 some成为null。然后,当访问really的属性null时会出错。

我的问题是:避免这种情况的最佳做法是什么?例如,我从lodash使用_.get来避免它。但是我认为_.get与TypeScript一起使用时确实很糟糕。因为您应该将props编写为字符串,例如

isDeep() {
    return _.get(this.some, 'really.deep')
}

我见过的另一种方法就是使用try / catch。它看起来更便于重构和类型化,但也更难看。而且我也不是很确定是否可以将try / catch放入任何潜在的不安全的属性访问中。

isDeep() {
    try {
        return this.some.really.deep
    } catch (_) {
        return false
    }
}

最明显但有时几乎不可读的选项是:

isDeep() {
    return this.some && this.some.really && this.some.really.deep
}

那么您认为处理这种情况并避免在计算属性中使用TypeError: Cannot read property 'blah' of null的最佳方法是什么?您在项目中使用哪个?

0 个答案:

没有答案