将请求数据的逻辑写在组件的 methods 中,适用于一些简单的场景,特别是当数据仅在该组件中使用时。
<template>
<div>
<button @click="fetchData">Fetch Data</button>
<div v-if="data">{{ data }}</div>
</div>
</template>
<script>
export default {
data() {
return {
data: null,
};
},
methods: {
async fetchData() {
try {
const response = await fetch('https://api.example.com/data');
this.data = await response.json();
} catch (error) {
console.error('Error fetching data:', error);
}
},
},
};
</script>
将请求数据的逻辑写在 Vuex 的 actions 中,适用于需要共享状态或全局管理数据的场景。
// store.js
import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);
export default new Vuex.Store({
state: {
data: null,
},
mutations: {
setData(state, data) {
state.data = data;
},
},
actions: {
async fetchData({ commit }) {
try {
const response = await fetch('https://api.example.com/data');
const data = await response.json();
commit('setData', data);
} catch (error) {
console.error('Error fetching data:', error);
}
},
},
});
<template>
<div>
<button @click="fetchData">Fetch Data</button>
<div v-if="data">{{ data }}</div>
</div>
</template>
<script>
import { mapState, mapActions } from 'vuex';
export default {
computed: {
...mapState(['data']),
},
methods: {
...mapActions(['fetchData']),
},
};
</script>
一般来说,简单的应用或数据请求逻辑可以放在组件的 methods 中,而对于复杂的应用或需要共享状态的数据请求,使用 Vuex 的 actions 更为合适。这两种方法可以根据具体的需求和场景灵活选择。