Vue 对计算的道具更改没有反应
Vue not reacting to a computed props change
我在我的一个组件中使用 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
我知道我可以使用观察者,但我想尽可能避免使用它,因为我目前使用它的方式更干净
不要破坏道具以保持其反应性setup({ testNumber })
:
setup(props) {
return {
testNumberComputed: computed(() => {
return props.testNumber;
}),
};
}
我在我的一个组件中使用 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
我知道我可以使用观察者,但我想尽可能避免使用它,因为我目前使用它的方式更干净
不要破坏道具以保持其反应性:setup({ testNumber })
setup(props) {
return {
testNumberComputed: computed(() => {
return props.testNumber;
}),
};
}