如何修改vuex里面的數據
修改vuex里面的數據
Vuex 使用 mutations 來修改狀態(tài)數據。Mutation 提供了一種在同步方式下修改 Vuex state 的方式,確保所有狀態(tài)的變更都可以被追蹤。
首先,在 Vuex store 中定義一個 mutation??梢酝ㄟ^ store.commit() 方法來觸發(fā) mutation。
例如:我們給state中的cart追贈數據
store/index.js
state:{
cart:[]
},
mutations:{
updateCart(state,cart){
state.cart=cart
}
}渲染數據:
<view v-for="(item,index)in cart" :key="index">
xxx
<view>
import { mapState } from 'vuex';
export default {
computed:{
...mapState(['cart'])
}
}需求:增加新的數據(方法)
錯誤示范
- 案例1:
this.$store.state.cart.push()
問題:很明顯這么干是錯誤的,因為state的數據只能由mutations來修改
- 案例2:
const cartList=this.$store.state.cart
cartList.push()
this.$store.commit('updateCart',xxxx)問題:這樣也是錯誤的,看起來是通過commit觸發(fā)mutations來修改cart數據的,其實
const cartList=this.$store.state.cart cartList.push()
這兩步就已經可以實現數據的添加,雖然數據添加成功了,但是在控制臺vuex中cart的數據并沒有發(fā)生變化,這是因為state中的數據雖然更改了,但是沒有經過mutations,所有狀態(tài)的變更都不可以被追蹤到。
手動點擊Root相當于刷新vuex,這時候vuex中的cart數據更新到最新的狀態(tài),但是并不知道什么時候更改的,對后期如果想要操作cart中的數據有影響
正確寫法
先深拷貝,在新增
computed:{
cart(){
return JSON.parse(JSON.stringify(this.$store.state.cart))
}
method:{
updateData(){
this.cart.push(xxx)
this.$store.commit('updateCart',this.cart)
}總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Vue3的provide和inject實現多級傳遞的原理解析
Vue3中的provide和inject函數通過原型鏈實現數據的多級傳遞,父組件使用provide注入數據,子組件和后代組件通過inject獲取這些數據,在創(chuàng)建組件實例時,子組件會繼承父組件的provides屬性對象,介紹Vue3的provide和inject實現多級傳遞的原理,需要的朋友可以參考下2024-12-12
Vue3+Vite中不支持require的方式引入本地圖片的解決方案
這篇文章主要介紹了Vue3+Vite中不支持require的方式引入本地圖片的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01
Vue之el-select結合v-if動態(tài)控制template顯示隱藏方式
這篇文章主要介紹了Vue之el-select結合v-if動態(tài)控制template顯示隱藏方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-04-04

