vue3之组合式函数

抽取成一个组合式函数:

javascript 复制代码
// fetch.js
//接收响应式状态
import { ref, watchEffect, toValue  } from 'vue'
//一个封装的异步请求
import { fetch } from '../XX'
export function useFetch(url) {
	  const data = ref(null)
	  const error = ref(null)
	  const fetchData = () => {
	  	  // 重置data,error 数据
	      data.value = null
	      error.value = null
	      //toValue() 是一个在 3.3 版本中新增的 API。它的设计目的是将 ref 或 getter 规范化为值
		  fetch(toValue(url))
		    .then((res) => res.json())
		    .then((json) => (data.value = json))
		    .catch((err) => (error.value = err))
	  }
	 
	 watchEffect(() => {
	 	//只要fetchData函数中的url变就自动触发watchEffect
	   fetchData()
	 })
  return { data, error }
}

在组件里只需要这样使用:

javascript 复制代码
<script setup>
import { useFetch } from './fetch.js'

// 当 props.id 改变时重新 fetch
const { data, error } = useFetch(() => `/posts/${props.id}`)
</script>
相关推荐
我是伪码农几秒前
动态表格案例
前端·javascript·html
我是伪码农1 分钟前
随机点名案例
前端·css·css3
徐_三岁4 分钟前
Windows 下 pnpm dev 报错:spawn esbuild.exe ENOENT(pnpm workspace / monorepo)
前端
亮子AI7 分钟前
【npm】如何创建自己的npm私有仓库?
前端·npm·node.js
JS_GGbond8 分钟前
前端Token无感刷新:让用户像在游乐园畅玩一样流畅
前端
用户8168694747259 分钟前
Context API 的订阅机制与性能优化
前端·react.js
用户49394095229359 分钟前
Function.prototype.bind实现
前端
用户8417948145610 分钟前
vue 甘特图 vxe-gantt 任务里程碑和依赖线的使用
vue.js
AAA阿giao11 分钟前
Vue3 调用 Coze 工作流:从上传宠物照到生成冰球明星的完整技术解析
前端·vue.js·coze
异界蜉蝣12 分钟前
React Fiber架构:Diff算法的演进
前端·react.js·前端框架