您现在的位置是:网站首页> 编程资料编程资料

vue3中调用api接口实现数据的渲染以及详情方式_vue.js_

2023-05-24 352人已围观

简介 vue3中调用api接口实现数据的渲染以及详情方式_vue.js_

调用api接口实现数据的渲染及详情

首先新建一个项目

yarn create vite vue3-template --template vue

然后下载相应的api

npm i axios router

首先配置

App.vue

main.js

import { createApp } from 'vue' import App from './App.vue' import router from './router' createApp(App).use(router).mount('#app')

封装axios src/utils/request.js

import axios from 'axios' const instance = axios.create({     baseURL:"https://cnodejs.org/api/v1" }) export default instance

在src/api/topics.js 中请求

import axios from '../utils/request'; //请求列表的函数 export const getTopics = (params) => axios("/topics",{params}) //根据id获取详情 export const getTopic = (id,params) => axios.get(`/topic/${id}`,{params})

新建hooks src/componsables/useTopics.js

import { ref,onMounted } from 'vue' import { getTopics } from '../api/topics' export default function useTopics(){     /**  * 数据渲染功能  */ //声明 数据 const topics = ref([]) //请求数据 onMounted(async () => {     const res =await getTopics()     topics.value = res.data.data }) return {     topics } }

新建hooks src/componsables/useTopic.js

import { useRouter } from 'vue-router' export default function useTopics(){   //跳转 const router = useRouter() const go = (id) =>{     router.push("/detail?id=" + id) } return {     go } }

在 src 下 新建 /views/Index.vue

在 src 下 新建 /views/Detail.vue

在src 下 新建 router/index.js

import { createWebHashHistory ,createRouter} from "vue-router" import Index from '../views/Index.vue' const routes = [      {          path:'/',          component:Index      },      {          path:'/detail',          component:()=> import('../views/Detail.vue')      },      {          path:"/store",          component:()=> import('../views/Store.vue')      } ]  const router = createRouter({     history:createWebHashHistory(),     routes }) export default router

即可实现数据的渲染以及跳转功能

vue3常用api梳理

setup参数

1.props

props 是响应式的,当传入新的 props 时,它将被更新。

示例如下:

//父组件 
//子组件 

当点击按钮执行add方法,子组件num会自动更新。

2.context

  • attrs:Attribute (非响应式对象,等同于 $attrs)
  • slots:插槽 (非响应式对象,等同于 $slots)
  • emit:触发事件 (方法,等同于 $emit)
  • expose:暴露公共 property (函数)

生命周期

选项式 APIHook inside setup
beforeCreateNot needed*
createdNot needed*
beforeMountonBeforeMount
mountedonMounted
beforeUpdateonBeforeUpdate
updatedonUpdated
beforeUnmountonBeforeUnmount
unmountedonUnmounted
errorCapturedonErrorCaptured
renderTrackedonRenderTracked
renderTriggeredonRenderTriggered
activatedonActivated
deactivatedonDeactivated

示例如下:

响应式数据 ref、reactive

  • ref:将一个原始数据类型(String、Number、BigInt、Boolean、Symbol、Null、Undefined)转换成一个带有响应式特性的数据类型。
  • reactive:将一个对象(Object) 转换成带有响应式的特性。

示例如下:

可能会觉得data.xxx 的写法太麻烦,那么我们可以使用torefs来解构。

torefs:可以将一个响应型对象(reactive) 转化为普通对象(obj),同时又把该对象中的每一个属性转化成对应的响应式属性(ref)。

示例如下,效果同上:

在实际的开发过程中,给对象整体重新赋值的情况也屡见不鲜,倘若直接重新是不可以的,可以自行尝试,下面的一种比较推荐的写法,效果同上:

coumputed

watch && watchEffect

watchEffect 它与 watch 的区别主要有以下几点:

  • watchEffect不需要手动传入依赖
  • watchEffect每次初始化时会执行一次回调函数来自动获取依赖
  • watchEffect无法获取到原值,只能得到变化后的值

watch示例: