【问题标题】:Vue: computed vs data(), for vuex bindings?Vue:计算与数据(),用于 vuex 绑定?
【发布时间】:2018-10-18 18:17:59
【问题描述】:

(注意:我不是在问如何使用watch)。

我有这个表单模板,想将它绑定到一些变量,例如 objectvalue3,这些变量在 Vuex 商店中被跟踪(注意:不同的表单可能出现在一个页面上,所以 props.formname 告诉表单在哪里看)。

<template>
    <div>
    Tracking formname_:{{formname_}}:
        <form method="post" autocomplete="off">
            <input type="text" name="objectvalue3" :value="objectvalue3" />
            <input type="submit" class="btn btn-primary btn-success" value="Track" @click.prevent="write">        
        </form>
    </div>
</template>
....
props: {
    formname: {
        type: String,
        default: "main"
    }
},

data 中跟踪它不起作用 - 即表单没有更新 - 它只是保留 vuex 初始化为的值:

data: function() {
    return {
        formname_: this.formname
        ,objectvalue3: this.$store.state.tracker[this.formname].objectvalue3
},

但是使用computed 可以。

computed: {
    objectvalue3: function() {
        return this.$store.state.tracker[this.formname].objectvalue3
    }

我知道当我需要进行计算时必须使用computed。但是这里没有真正的计算。除非,它可能是通过this.formname 的哈希查找告诉要查看哪个tracker 属性的表单导致直接data 失败?这是 vuex 特有的吗?

【问题讨论】:

  • 我没有使用手表。

标签: vue.js vuex


【解决方案1】:

试试这个:

data: function() {
    return {
        formname_: this.formname,
        tracker: this.$store.state.tracker[this.formname]
},

然后:

<input type="text" name="objectvalue3" :value="tracker.objectvalue3" />

这应该可以工作,因为数据的 tracker 对象指向存储中的那个,那么每当那里的值发生变化时,tracker 对象中的值也会发生变化。

computed 起作用是因为它监听其中使用的变量的变化,而 data 不起作用,因为它在执行时应用第一个值并且不跟踪变化。

【讨论】:

  • 嗯,不确定我是否使用了正确的语义,但是,如果我理解正确,数据可以保存对对象的引用,然后知道它的属性发生了什么?但是,当它用于查看不可变属性(如 int 或字符串)时,它会按值复制而不跟踪进一步的更改?在 Python 世界中,引用和不可变变量的微妙影响经常会咬人,所以这些是我正在使用的术语,也许对于 JS 来说是不正确的。
  • 是的,这是一个 javascript 的东西。如果您执行var yourVar = Number/String,则不是复制引用,而是传递值。但是,如果您执行var yourVar = Object,那么您将引用传递给对象,而不是复制它。
  • 我已将您的问题标记为重复,因为该问题中的答案可能会对您有所帮助。
  • 啊哈,就像 Python ;-)
  • State 不应在您的组件中引用。您可以改用gettermapGetters 作为速记。
猜你喜欢
  • 2020-11-17
  • 1970-01-01
  • 2019-10-19
  • 1970-01-01
  • 2018-02-12
  • 2020-04-17
  • 2014-03-09
  • 2016-04-23
  • 2020-05-25
相关资源
最近更新 更多