如何优化Pinia中API服务的使用方案?避免重复校验服务可用性
问题:Pinia Store中注入API Service的优化方案
我有一个专门处理API通信的service文件(这是唯一执行实际API调用的文件),在Pinia store中使用该service时遇到了问题。
当前实现逻辑:为了提升可测试性,通过props将service传入Vue组件;由于找不到直接让store使用该service的合适方式,我创建了useService组合式函数来存储service,供store导入使用。
当前代码示例
component.vue
const props = defineProps<{ service: ServiceInterface }>() // 获取组合式函数并设置service const actualService = useService() actualService.setService(props.service) // 使用store const store = useStore()
useService.ts
const service = ref<ServiceInterface>() export const useService = () => { const setService = (newService: ServiceInterface) => { service.value = newService } return { service, setService } }
useStore.ts
// 导入组合式函数 const { service } = useService() export const useStore = defineStore('storeName', { actions: { async fetchData(id: string) { // 确保service已设置 if (!service.value) { throw new Error('No service') } // 使用service service.value.getData(id) } } })
这套方案虽然能运行,但每个store方法都需要校验service是否可用,我认为实现过于繁琐,希望优化该流程。
期望的理想方案(目前无法运行)
export const useStore = (service: ServiceInterface) => { return defineStore('storeName', { actions: { async fetchData(id: string) { service.getData(id) } } }) }
内容的提问来源于stack exchange,提问作者whereo
相关产品推荐
相关产品推荐

