gpt4 book ai didi

vue.js - 状态更改后重新渲染组件 vue.js

转载 作者:行者123 更新时间:2023-12-05 05:18:51 30 4
gpt4 key购买 nike

我正在使用 NuxtJS 和 VueJS。我在状态更改后无法重新渲染组件时遇到问题。

index.js文件

Vue.use(Vuex)

const state = {
productsHome: [],
accessToken: {},
collections: {},
product: {},
cart: {},
}

const getters = {
productForHomepage (state) {
return state.productsHome
},
productForPdp (state) {
return state.product
},
cart (state){
return state.cart
}
}

const actions = {
nuxtServerInit (context) {
//good place to set language
},
GET_HOME(){
api.getHomepageProducts().then(response => {
this.commit('setHomeProducts', response.data)
})
},
GET_PDP(sth){
api.findBySlug(this.app.router.history.current.params.slug).then(response => {
this.commit('setPDPData', response.data)
})
},
ADD_TO_CART(store, id){
api.addToCart(id).then(res => {
store.commit('updateCart', res.data)
})
}
}

const mutations = {
setHomeProducts(state, data){
state.productsHome = data
},
setPDPData(state, data){
state.product = data[0]
},
updateCart(state, data){
for (var optbox of data) {
state.cart[optbox.id] = optbox;
}
// state.cart.set('iteams', 'count', 1)
}
}

const createStore = () => {
return new Vuex.Store({
state,
getters,
mutations,
actions
});
}

export default createStore;

这是组件

<template>
<div>
<div class="content">
<p>
This is cart
</p>
{{ cart }}
</div>
</div>
</template>
<script>

export default {
data() {
return {
cart: this.$store.state.cart
}
},
watch: {
cart: function(val){
cart = this.$store.state.cart
}
},
methods: {
updateCart: function(){
console.log(this)
}
}
}
</script>

最佳答案

当你这样做时:

  data() {
return {
cart: this.$store.state.cart
}
}

您使用购物车状态的值初始化数据,但它不会随着购物车状态的变化而不断变化,这是一次性的,如您在 this JSFiddle 中所见。

你真正想做的是使用计算:

computed: {
cart(){
return this.$store.state.cart
}
}

现在,只要商店中的购物车状态发生变化,组件中购物车的值也会发生变化。

这里是 JSFiddle:https://jsfiddle.net/craig_h_411/zrbk5x6q/

关于vue.js - 状态更改后重新渲染组件 vue.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47166770/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com