在Vue中,我們使用state來存儲應(yīng)用程序的數(shù)據(jù)。但有時候,我們需要動態(tài)改變state值。下面介紹兩種常見的改變state值的方法。
// 創(chuàng)建一個Vue實例 var app = new Vue({ // 存儲數(shù)據(jù)的state state: { count: 0 }, // 改變state值的方法 mutations: { increment(state) { state.count++ } } })
第一種方法是使用mutations。mutations是用來改變state值的唯一途徑。該方法的第一個參數(shù)是state,用來訪問應(yīng)用程序的數(shù)據(jù)。如上述代碼片段中的state.count就是訪問count數(shù)據(jù)。下面以一個按鈕點(diǎn)擊事件為例,來演示如何使用mutations改變state值:
// HTML// Vue實例 var app = new Vue({ state: { count: 0 }, mutations: { increment(state) { state.count++ } } })
當(dāng)用戶點(diǎn)擊按鈕時,increment方法就會被調(diào)用,從而改變count的值。在使用mutations時,需要注意的是,所有的state改變方法必須是同步的,否則可能會導(dǎo)致應(yīng)用程序的數(shù)據(jù)一致性問題。
第二種方法是使用actions。actions是用來異步改變state值的。如果我們需要獲取異步數(shù)據(jù)并且根據(jù)數(shù)據(jù)來改變state,那么就需要使用actions。下面以獲取數(shù)據(jù)為例,來演示如何使用actions:
// Vue實例 var app = new Vue({ state: { count: 0, data: null }, mutations: { increment(state) { state.count++ }, setData(state, payload) { state.data = payload.data } }, actions: { fetchData(context) { // 異步請求數(shù)據(jù) axios.get('/data').then(res =>{ context.commit('setData', {data: res.data}) }) } } })
當(dāng)我們需要獲取數(shù)據(jù)時,就可以使用fetchData方法,并通過context.commit()來觸發(fā)mutations中的方法,并傳遞數(shù)據(jù)。在actions中,第一個參數(shù)是context,它提供了跨模塊的數(shù)據(jù)訪問方式,我們可以通過context.commit()來調(diào)用mutations中的方法。以上就是兩種改變state值的方法。