【发布时间】:2020-03-05 08:38:07
【问题描述】:
我有一个 Keyboard.vue 组件,其中包含许多 Key.vue 子组件实例(每个键一个)。
在Key.vue 中,键实际上是一个可以被禁用的html <button> 元素。
通过单击我的应用程序中的某个按钮,我想重置键盘并再次启用所有键。我认为将v-if 设置为false 然后再设置为true (<keyboard v-if="BooleanValue" />) 会重新渲染Keyboard.vue 及其所有Key.vue 子组件实例。
它没有。为什么不呢?
App.vue
<template>
<div class="app">
...
<keyboard v-if="!gameIsOver && showKeyboard" />
...
</div>
</template>
<script>
export default {
components: {
Keyboard
},
computed: {
gameIsOver () {
return this.$store.state.gameIsOver
},
showKeyboard () {
return this.$store.state.showKeyboard
}
}
Keyboard.vue
<template>
<section>
<key class="letter" v-for="(letter) in letters" :key="letter" :letter="letter" />
</section>
</template>
Key.vue
<template>
<button :disabled="disabled" @click="checkLetter(letter)">
{{ letter }}
</button>
</template>
<script>
export default {
...
data () {
return {
disabled: false
}
}
我的按钮重置键盘触发器:
this.$store.commit('SET_KEYBOARD_VISIBILITY', false)
this.$store.commit('SET_KEYBOARD_VISIBILITY', true)
【问题讨论】:
-
你能发布你的代码吗?
-
好的,我刚刚编辑了问题
-
它应该自动重新渲染组件。事实上,它不太可能意味着您的变量不是反应性的,或者以无法检测到的方式被覆盖。由于 Key.vue 中的变量
disabled突然出现,我无法真正检查变量的来源或修改方式。 -
至于您的其他问题:重新渲染仅在下一个刻度发生。如果您在一个刻度内修改了两次变量,它将只使用最后一个值进行下一次重新渲染
-
@Sumurai8 我在下一个刻度中将变量设置回
true,现在它可以工作了,谢谢!我认为您做出回答(我会接受)可能是值得的,因为我怀疑很多人不知道这一点。
标签: vue.js components vue-reactivity