想象一下,您在商店中有一些嵌套状态。例如
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
的最佳方法是什么?您在项目中使用哪个?