计算属性返回状态变量不是反应性的

对于a子手游戏,我有一个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似乎没有反应,为什么?

vacant_7 回答:计算属性返回状态变量不是反应性的

这是因为state.wordToGuessAsArray[value.i] = value.letter没有反应。 因为Vue.js仅监视pushsplice之类的数组方法。

您需要做this.$set(state.wordToGuessAsArray,value.i,value.letter);

或者在Vuex中: Vue.set(state.wordToGuessAsArray,value.letter);并在文件中导入Vue。

在此处了解更多信息:

https://vuejs.org/v2/guide/reactivity.html#Change-Detection-Caveats

Vuejs and Vue.set(),update array

本文链接:https://www.f2er.com/3156523.html

大家都在问