计算 属性 返回状态变量不是反应性的
Computed property returning state variable isn't reactive
对于刽子手游戏,我有一个 Word.vue
组件,我在其中尝试初始化一个名为 wordToGuessAsArray
的数组,其中包含 n 个空项(n = 要猜测的单词中的字母数):
<template>
<section>
<div v-for="(letter, i) in wordToGuessAsArray" :key="i">
</div>
</section>
</template>
<script>
export default {
computed: {
wordToGuessAsArray () {
return this.$store.state.wordToGuessAsArray
}
},
mounted () {
const wordToGuess = 'strawberry'
for (var i = 0; i < wordToGuess.length; i++) {
this.$store.commit('SET_WORD_AS_ARRAY_PUSH')
}
}
}
</script>
下面是我的store
与这个问题相关的内容:
state: {
wordToGuessAsArray: [],
},
mutations: {
SET_WORD_AS_ARRAY_PUSH (state) {
state.wordToGuessAsArray.push('')
},
SET_WORD_AS_ARRAY (state, value) {
state.wordToGuessAsArray[value.i] = value.letter
}
}
我的问题如下。在我的 Keyboard.vue
组件中,当用户选择一个确实属于要猜测的单词的字母时,我会这样更新我的状态:
this.$store.commit('SET_WORD_AS_ARRAY', { letter, i })
我希望这个突变能够更新我的 Word.vue
组件中的单词:
<div v-for="(letter, i) in wordToGuessAsArray" :key="i">
但事实并非如此。 wordToGuessAsArray
似乎没有反应,为什么?
这是因为state.wordToGuessAsArray[value.i] = value.letter
没有反应。
因为 Vue.js 只观察像 push
或 splice
.
这样的数组方法
你需要做this.$set(state.wordToGuessAsArray, value.i, value.letter);
或者在 Vuex 中:
Vue.set(state.wordToGuessAsArray, value.i, value.letter);
并在您的文件中导入 Vue。
在此处阅读更多内容:
https://vuejs.org/v2/guide/reactivity.html#Change-Detection-Caveats
对于刽子手游戏,我有一个 Word.vue
组件,我在其中尝试初始化一个名为 wordToGuessAsArray
的数组,其中包含 n 个空项(n = 要猜测的单词中的字母数):
<template>
<section>
<div v-for="(letter, i) in wordToGuessAsArray" :key="i">
</div>
</section>
</template>
<script>
export default {
computed: {
wordToGuessAsArray () {
return this.$store.state.wordToGuessAsArray
}
},
mounted () {
const wordToGuess = 'strawberry'
for (var i = 0; i < wordToGuess.length; i++) {
this.$store.commit('SET_WORD_AS_ARRAY_PUSH')
}
}
}
</script>
下面是我的store
与这个问题相关的内容:
state: {
wordToGuessAsArray: [],
},
mutations: {
SET_WORD_AS_ARRAY_PUSH (state) {
state.wordToGuessAsArray.push('')
},
SET_WORD_AS_ARRAY (state, value) {
state.wordToGuessAsArray[value.i] = value.letter
}
}
我的问题如下。在我的 Keyboard.vue
组件中,当用户选择一个确实属于要猜测的单词的字母时,我会这样更新我的状态:
this.$store.commit('SET_WORD_AS_ARRAY', { letter, i })
我希望这个突变能够更新我的 Word.vue
组件中的单词:
<div v-for="(letter, i) in wordToGuessAsArray" :key="i">
但事实并非如此。 wordToGuessAsArray
似乎没有反应,为什么?
这是因为state.wordToGuessAsArray[value.i] = value.letter
没有反应。
因为 Vue.js 只观察像 push
或 splice
.
你需要做this.$set(state.wordToGuessAsArray, value.i, value.letter);
或者在 Vuex 中:
Vue.set(state.wordToGuessAsArray, value.i, value.letter);
并在您的文件中导入 Vue。
在此处阅读更多内容:
https://vuejs.org/v2/guide/reactivity.html#Change-Detection-Caveats