当vuex的状态更改时,我的vue组件不会更改子组件。
我有一个项目插槽列表,并且想要根据vuex状态变量渲染项目。
单击“项目”组件时,它会设置selectedItem
状态变量。另一个组件监视此变量,并为equippedItems
变量设置新数据。
但是当我尝试更改项目时,即使状态在Vuex中似乎已更改,也不会显示。
我已经这样设置了vuex存储:
const state = {
equippedItems:
[
{
name: 'Item 1',
strength: 3,
itemType: 1,
rarity: 3
},
{
name: 'Item 2',
strength: 40,
itemType: 2,
rarity: 2
}
],
selectedItem: null
}
const getters = {
getEquippedItems: (state) => state.equippedItems,
getSelectedItem: (state) => state.selectedItem
}
const mutations = {
changeSelectedItem: (state, newItem) => {
state.selectedItem = newItem;
},
changeEquippedItems: (state, parameters) => {
state.equippedItems[parameters[0]] = parameters[1];
}
}
const actions = {
setSelectedItem({ commit }, index) {
commit('changeSelectedItem', index);
},
setNewEquipment({ commit }, parameters) {
commit('changeEquippedItems', parameters);
}
}
export default {
state,
getters,
actions,
mutations
}
然后我有一个根据equippedItems
变量设置项目的组件
import { mapGetters, mapActions } from 'vuex';
import Item from '../Item';
export default {
name: 'equipped-items',
components: {
Item
},
props: [],
data() {
return {
chooseHead: false,
}
},
computed: {
...mapGetters(['getEquippedItems', 'getItems', 'getSelectedItem'])
},
methods: {
...mapActions(['setNewEquipment']),
chooseNewHead() {
this.chooseHead = !this.chooseHead;
}
},
watch: {
getSelectedItem: function () {
if (this.chooseHead) {
this.setNewEquipment([0, this.getSelectedItem]);
}
}
}
}
<section class="equipped-items">
<div @click="chooseNewHead" class="head equipSlot">
<Item v-if="getEquippedItems[0]" :passedItem="getEquippedItems[0]" :parent="'equip'"> </Item>
</div>
<div class="body equipSlot">
<Item v-if="getEquippedItems[1]" :passedItem="getEquippedItems[1]"></Item>
</div>
</section>
然后是item组件,可在单击时设置vuex变量selectedItem
。
import { mapActions } from 'vuex';
export default {
name: 'Item',
props: ['passedItem', 'parent'],
methods: {
...mapActions(['setSelectedItem']),
selectedItem() {
if (this.parent != 'equip') {
this.setSelectedItem(this.passedItem);
}
}
}
}
第一次加载页面时,它呈现良好的效果,但不会将新传递的项目更改为item-component。
预先感谢
答案 0 :(得分:1)
您的代码中有几个错误:
1-我无法确定您在组件中的zip testing a b
方法中调用/触发事件的位置。
2-(这是额外的)如果要在JavaScript中将对象追加到数组中,则只需使用selectedItem()
,所以我建议您将array.push(odject)
突变更改为:
changeEquippedItems