Vue.js 为什么该组件的计算属性不是反应性的:

Vue.js 为什么该组件的计算属性不是反应性的:,vue.js,vuejs2,Vue.js,Vuejs2,我有一个这样的物体: myObject: { items: [{ title: '140', isActive: true, }, { title: '7', isActive: false }, { title: '10', isActive: false }] } <my-component :items="myObject.items"></my-compon

我有一个这样的物体:

  myObject: {
    items: [{
      title: '140',
      isActive: true,
    }, {
      title: '7',
      isActive: false
    }, {
      title: '10',
      isActive: false
    }]
  }
<my-component :items="myObject.items"></my-component>
onClick (index) {
  Vue.set(this.items, index, true);
}
我是这样使用的:

  myObject: {
    items: [{
      title: '140',
      isActive: true,
    }, {
      title: '7',
      isActive: false
    }, {
      title: '10',
      isActive: false
    }]
  }
<my-component :items="myObject.items"></my-component>
onClick (index) {
  Vue.set(this.items, index, true);
}

这是组件的外观:

<template>
  <div class="i-panel panel-container d-flex"
    <div
      v-for="item in prefs.items"
      class="panel-item"
      @click="onClick(item)">
      <!-- some content -->
    </div>
  </div>
</template>

<script>
export default {
  name: 'IPanel',
  props: {
    items: {
      type: Array,
      default () {
        return []
      }
    }
  },

  computed: {
    // code
    prefs () {
      return {
        items: this.items
      }
    }
  },

  methods: {
    onClick (item) {
      this.prefs.items.forEach(item => {
        if (JSON.stringify(item) === JSON.stringify(clickedItem)) {
          item.isActive = true
        }
      })
    }
  }
}
</script>

{
if(JSON.stringify(item)==JSON.stringify(clickedItem)){
item.isActive=true
}
})
}
}
}
当我单击一个项目时(该
项目
单击编辑项
相同),它应该变成
活动的
。是的。但是我必须刷新Vue开发工具或重新呈现页面才能使更改生效

为什么
item.isActive=true
没有反应?

改变

<div
  v-for="item in prefs.items"
  class="panel-item"
  @click="onClick(item)">
  <!-- some content -->
</div>

改变


在您发布的代码中,您使用的是未在任何地方定义的clickedItem对象。我不知道这是在写你的问题的过程中还是你的问题

但是,当正确使用
clickedItem
时,它似乎可以工作:

HTML

<div id="app" class="i-panel panel-container d-flex">
    <div
      v-for="item in prefs.items"
      class="panel-item"
      @click="onClick(item)">
      <!-- some content -->{{ item.isActive ? 'active' : 'inactive' }}
    </div>
</div>

在您发布的代码中,您使用的是未在任何地方定义的clickedItem对象。我不知道这是在写你的问题的过程中还是你的问题

但是,当正确使用
clickedItem
时,它似乎可以工作:

HTML

<div id="app" class="i-panel panel-container d-flex">
    <div
      v-for="item in prefs.items"
      class="panel-item"
      @click="onClick(item)">
      <!-- some content -->{{ item.isActive ? 'active' : 'inactive' }}
    </div>
</div>

在您的
onClick
方法中,您使用的是
clickedItem
对象,但我看不到它有任何定义。在
onClick
方法中,您使用的是
clickedItem
对象,但是我看不出它在任何地方都有定义。旁注:你不应该直接变异你的道具,而应该复制你的道具来使用它们。旁注:你不应该直接变异你的道具,而应该复制你的道具来使用它们: