vue中刷新页面后如何获取cookie值并放入Vuex store

Posted

技术标签:

【中文标题】vue中刷新页面后如何获取cookie值并放入Vuex store【英文标题】:How to get the cookie value and put it into the Vuex store after refreshing page in vue 【发布时间】:2021-12-09 00:06:27 【问题描述】:

我有一个产品组件,我有一个我正在将产品添加到购物车:

addToCart: function () 
            this.amount = this.itemsCount !== "" ? this.itemsCount : 1;
            if(this.variationId != null) 
                this.warningMessage = false;
                    cartHelper.addToCart(this.product.id, this.variationId, parseInt(this.amount), (response) => 
                        this.$store.dispatch('addProductToCart', 
                            cart: response.data,
                        )
                    );
             else 
                this.warningMessage = true;
            
        ,

而且我也有购物车助手,我在其中进行 API 调用并将 cart_guid 存储在 cookie 中:

let cartHelper = 
    cartCookieName: "_cart",
    cookieValue: "",

    getCart: function (callback = undefined) 
        return apiHelper.getRequest(
            "/carts",
            (response) => 
                document.cookie = `$this.cartCookieName=$response.data.attributes.cart_guid;`;
                this.cookieValue = response.data.attributes.cart_guid;
                if (callback)  callback(response); 
            
        )
    ,

    addToCart: function (product, variation_id, amount, callback = undefined) 
        if(this.cookieValue == "") 
            this.getCart(() => 
                this._addToCart(product, variation_id, amount, callback);
            );
         else 
            this._addToCart(product, variation_id, amount, callback)
        
    ,

    _addToCart(product, variation_id, amount, callback = undefined) 
        return apiHelper.postRequest(
            `/carts/$this.cookieValue/add-item`,
            (response) => 
                document.cookie = `$this.cartCookieName=$response.data.attributes.cart_guid;`;
                if (callback)  callback(response); 
            ,
            
                product_id: product,
                variation_id: variation_id,
                amount: amount,
            
        )
    ,
   
export default cartHelper;

(我没有写我在cookie中存储cart_guid的代码。我认为没有必要,它基本上是cookieValue) 因此,当我将产品添加到购物车时,我会将这些数据存储在 Vuex 中。为此我的行动:

export const addProductToCart = (commit, cart) => 
    commit('ADD_TO_CART', cart);

我的突变:

export const ADD_TO_CART = (state, cart) => 
    state.cart = cart;

和我的状态:

export default 
    cart: 
        "attributes": 
            "items": [],
        
    

当我刷新页面时,我正在尝试做什么,Vuex 中的值丢失了,但由于仍然有一个值为 cart_guid 的 cookie,我基本上应该进行此调用并用 cart_guid 再次填充 Vuex。但是我对 Vuex 还很陌生,所以我不知道应该把逻辑放在哪里。如果您能给我任何提示或代码,我将非常高兴。

【问题讨论】:

【参考方案1】:

有一个 onMounted 生命周期,只要 vue 组件成功挂载到 DOM 上,里面的代码就会运行。你可以把你的函数放在它检索你的cookie值的地方,这样它就会在挂载后。

【讨论】:

以上是关于vue中刷新页面后如何获取cookie值并放入Vuex store的主要内容,如果未能解决你的问题,请参考以下文章

vue登录刷新回到首页的问题

.net 刷新了第二次页面后就获取不到cookies了,这是啥回事?

cookie怎么获取

微信小程序如何修改data中的数组值并刷新到页面

用JS怎么实现刷新页面后保留刷新前的页面上的数据显示

JavaScript在表单页面添加打印功能,打印表单中的值并打印完成后不刷新页面