Vue.js 利用计算属性有效地实现Vue

Vue.js 利用计算属性有效地实现Vue,vue.js,vuex,computed-properties,Vue.js,Vuex,Computed Properties,我的计算属性中有以下代码。预计该功能将变得非常复杂。把一切都放在这里对吗?我希望将其保存在存储文件中,但无法从computed属性中按名称调用函数。有什么建议吗 computed: { assignValue() { this.valueToSet = this.value1; if (this.valueToSet < 10) { return "1 week" } else if (this.valueToSet &

我的计算属性中有以下代码。预计该功能将变得非常复杂。把一切都放在这里对吗?我希望将其保存在存储文件中,但无法从computed属性中按名称调用函数。有什么建议吗

computed: {
  assignValue() {
    this.valueToSet = this.value1;
    
    if (this.valueToSet < 10) {
      return "1 week"
    } else if (this.valueToSet < 20) {
      return "2 weeks"
    } else if (this.valueToSet < 30) {
      return "3 weeks"
    } else {
      return 0;
    }
  }
}
总之,我希望将它放在我的store.js vuex中,但是如何在computer属性中按名称调用/触发函数呢

如果不可能,是否有有效的替代方案?或者我应该继续这样做?

Vuex本身具有可以与Vue组件的计算属性一起使用的属性,如文档中所示

就您的代码而言,您当前的方法没有问题。当需要在多个组件中重复使用该状态时,应将此代码移动到Vuex getter

代码中唯一的问题是:this.valueToSet=this.value1;。计算属性不应产生包括赋值在内的副作用。这并没有直接的危害,但在缓存计算值时,可能会在内部产生意外的后果。如果您仍然需要此部件-this.valueToSet=this.value1;-将其移动到其他计算属性或使用watch expression。

Vuex本身具有可与Vue组件的计算属性一起使用的属性,如文档所示

就您的代码而言,您当前的方法没有问题。当需要在多个组件中重复使用该状态时,应将此代码移动到Vuex getter


代码中唯一的问题是:this.valueToSet=this.value1;。计算属性不应产生包括赋值在内的副作用。这并没有直接的危害,但在缓存计算值时,可能会在内部产生意外的后果。如果您仍然需要此部件-this.valueToSet=this.value1;-将其移动到其他计算属性或使用watch表达式。

谢谢您的精确回答。据我所知,我可以把这个叫做$store.getter.xxx。从计算属性内?关于this.valueToSet=this.value1。当然我不会用它。将使用store.state访问所有文件。等待您的确认。在计算中,只需用this.value1<10替换所有表达式,如this.valueToSet<10等。计算程序将自动监视this.value1的更改。@MEAG否,您将把所有计算代码减去该赋值行移动到存储中的getter中。然后,您可以将该getter映射到页面/组件中的计算属性中,最简单的方法是使用…mapGetter'modulename',['getterName']。然后,您可以在模板中使用{{getterName}@MEAG来引用它,这与Soviut所说的一模一样。谢谢您的精确回答。据我所知,我可以把这个叫做$store.getter.xxx。从计算属性内?关于this.valueToSet=this.value1。当然我不会用它。将使用store.state访问所有文件。等待您的确认。在计算中,只需用this.value1<10替换所有表达式,如this.valueToSet<10等。计算程序将自动监视this.value1的更改。@MEAG否,您将把所有计算代码减去该赋值行移动到存储中的getter中。然后,您可以将该getter映射到页面/组件中的计算属性中,最简单的方法是使用…mapGetter'modulename',['getterName']。然后,您可以在模板中使用{{getterName}@MEAG来引用它,这与Soviut所说的一模一样。