【问题标题】:Vue not reacting to a computed props changeVue 没有对计算的 props 更改做出反应
【发布时间】:2021-08-14 12:21:09
【问题描述】:

我在我的一个组件中使用 Vue 组合 API,并且在让组件显示计算的 prop 更改的正确渲染值时遇到了一些麻烦。似乎如果我将道具直接提供给组件渲染它会做出应有的反应,但是当我通过计算属性传递它时它不会。

我不确定为什么会像我预期的那样在计算属性中也是反应性的?

这是我的代码:

App.vue

<template>
  <div id="app">
    <Tester :testNumber="testNumber" />
  </div>
</template>

<script>
import Tester from "./components/Tester";

export default {
  name: "App",
  components: {
    Tester,
  },
  data() {
    return {
      testNumber: 1,
    };
  },
  mounted() {
    setTimeout(() => {
      this.testNumber = 2;
    }, 2000);
  },
};
</script>

Tester.vue

<template>
  <div>
    <p>Here is the number straight from the props: {{ testNumber }}</p>
    <p>
      Here is the number when it goes through computed (does not update):
      {{ testNumberComputed }}
    </p>
  </div>
</template>

<script>
import { computed } from "@vue/composition-api";

export default {
  props: {
    testNumber: {
      type: Number,
      required: true,
    },
  },
  setup({ testNumber }) {
    return {
      testNumberComputed: computed(() => {
        return testNumber;
      }),
    };
  },
};
</script>

这是一个有效的代码框:

https://codesandbox.io/s/vue-composition-api-example-forked-l4xpo?file=/src/components/Tester.vue

我知道我可以使用观察者,但如果可以的话,我想避免这种情况,因为它以我目前的方式更清洁

【问题讨论】:

    标签: javascript vue.js vuejs2 vuejs3 vue-composition-api


    【解决方案1】:

    不要破坏道具以保持其反应性setup({ testNumber })

    setup(props) {
    return {
      testNumberComputed: computed(() => {
        return props.testNumber;
      }),
    };
    }
    

    【讨论】:

      猜你喜欢
      • 2018-12-23
      • 2018-06-13
      • 2019-11-07
      • 2020-08-30
      • 1970-01-01
      • 2016-08-09
      • 1970-01-01
      • 2020-04-05
      • 1970-01-01
      相关资源
      最近更新 更多