vue3 异步数据

2025-03-15 0 17

Image

vue3 异步数据

解决方案

在Vue 3中处理异步数据,通常会用到组合式API中的setup函数、refreactive来定义响应式数据,并结合async/await来处理异步请求。当组件挂载时,通过生命周期钩子(如onMounted)触发异步操作,获取数据并更新界面。

使用组合式 API 和 Axios 获取异步数据

这里以从服务器获取用户列表为例,需要安装axios:

npm install axios

然后创建一个名为UserList.vue的组件:
```vue

    Loading...
  • {{ user.name }}

import { ref, onMounted } from 'vue'
import axios from 'axios'

const loading = ref(true)
const users = ref([])

onMounted(async () => {
try {
const response = await axios.get('/api/users')
users.value = response.data
} catch (error) {
console.error(error)
} finally {
loading.value = false
}
})

``
上述代码中,我们定义了两个
ref类型的变量:loadingusersloading用于控制加载状态,users存储从服务器获取的数据。在组件挂载后,使用async/await发起异步请求,成功获取数据后赋值给users,最后将loading设置为false`,从而实现异步数据的展示。

使用Vuex管理异步数据

如果应用中有多个组件需要共享异步数据,可以考虑使用Vuex进行状态管理。
先安装vuex:

npm install vuex@next

创建store文件夹下的index.js
```javascript
import { createStore } from 'vuex'
import axios from 'axios'

export default createStore({
state: {
users: []
},
mutations: {
setUsers(state, users) {
state.users = users
}
},
actions: {
async fetchUsers({ commit }) {
try {
const response = await axios.get('/api/users')
commit('setUsers', response.data)
} catch (error) {
console.error(error)
}
}
}
})

在`main.js`中引入并使用store:
javascript
import { createApp } from 'vue'
import App from './App.vue'
import store from './store'

createApp(App).use(store).mount('#app')

接着可以在组件中这样使用:
vue

  • {{ user.name }}

import { computed } from 'vue'
import { useStore } from 'vuex'

const store = useStore()
const users = computed(() => store.state.users)

// 调用action获取数据
store.dispatch('fetchUsers')

```

使用Suspense包裹异步组件

Vue 3还提供了<Suspense>组件,它可以用来包裹那些可能需要异步加载内容的组件。假设有一个异步组件AsyncComponent
```vue

Loading...

// 模拟异步组件
const AsyncComponent = defineAsyncComponent(() =>
import('./components/UserList.vue')
)

``
这种方式适合于按需加载组件场景,比如路由懒加载等。当
AsyncComponent未加载完成时,会显示#fallback插槽中的内容;一旦加载完成,则渲染#default`插槽内的组件。

1. 本站所有资源来源于用户上传和网络,因此不包含技术服务请大家谅解!如有侵权请邮件联系客服!cheeksyu@vip.qq.com
2. 本站不保证所提供下载的资源的准确性、安全性和完整性,资源仅供下载学习之用!如有链接无法下载、失效或广告,请联系客服处理!
3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!
4. 如果您也有好的资源或教程,您可以投稿发布,成功分享后有积分奖励和额外收入!
5.严禁将资源用于任何违法犯罪行为,不得违反国家法律,否则责任自负,一切法律责任与本站无关

源码下载