Vue3 hooks 结构重名和互相调用
1 、因为很多页面都需要用到表格,所以我抽取了表格的逻辑到一个叫 useCommonTable.ts 的文件中,大概如下:
// ...省略无关代码
export default function (url) {
const isLoading = ref(false)
const tableData = ref([])
const commonTableConfig = reactive({
// ...
})
const getTableData = () => {
// ...
}
return {
isLoading,
tableData,
commonTableConfig,
getTableData
}
}
在使用的时候,一般就是如下:
setup() {
const {
isLoading,
tableData,
commonTableConfig,
getTableData
} = useCommonTable('url')
return {
isLoading,
tableData,
commonTableConfig,
getTableData
}
}
但是好死不死,突然有一个页面有 2 个表格,然后逻辑也一样,那我解构就重名了
setup() {
// 表格 1
const {
isLoading,
tableData,
commonTableConfig,
getTableData
} = useCommonTable('url1')
// 表格 2
const {
isLoading,
tableData,
commonTableConfig,
getTableData
} = useCommonTable('url2')
return {
isLoading,
tableData,
commonTableConfig,
getTableData
}
}
所以这种情况应该如何使用啊?我目前是
setup() {
// 表格 1
const useTable1 = useCommonTable('url1')
// 表格 2
const useTable2= useCommonTable('url2')
return {
isLoading1: useTable1.isLoading,
tableData1: useTable1.tableData,
commonTableConfig :useTable1.commonTableConfig,
getTableData1: useTable1.getTableData,
isLoading2: useTable2.isLoading,
tableData2: useTable2.tableData,
commonTableConfig :useTable1.commonTableConfig,
getTableData2: useTable2.getTableData
}
}
感觉这种导入方式有点啰里八嗦的。。。不知道各位大神是如何做的?能否教教小弟。。。
2 、关于 hooks 之间的调用
// hook1.ts
export default function() {
const getStudentDetails = (studentId) => {
// ...
}
}
// hook2.ts
export default function() {
const getClassDetails = async () => {
const studentIds = await self.$axios.get('...')
// 这里希望调用 hook1.ts 中的方法
// getStudentDetails(studentIds[0])
}
}
如果使用 callback 方式,在 hook2.ts 中传入的话,会导致 setup 中的引入必须有先后关系:
setup() {
const {getStudentDetails} = useHook1()
const {getClassDetails} = useHook2(getStudentDetails)
return {
// ...
}
}
大哥们能教教小弟吗?新手勿喷,感谢大家!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
两个组件逻辑也很像,你可以把他直接封成组件,至于第二个没想到好的