老师我想请问下为什么有些自定义函数里面拿不到vue相关的东西
来源:6-13 Composition API 如何实现逻辑复用
晓白菜菜
2021-03-27
import { useRoute, useRouter } from 'vue-router'
import { useStore } from 'vuex'
// 自定义函数
const getUserInfo = () => {
const { commit } = useStore() // 报错,没有useStore这个玩意
const route = useRoute() // 报错,没有路由这玩意
const router = useRouter() // 报错,没有路由这玩意
// 没有办法拿不到只能从外部传递进来了 commit,route,router.....
// ...省略一堆代码,比如存储数据,请求其他接口,跳转页面
}
// 普通点击按钮登录逻辑
export const useSubmitLogin = () => {
// 这里面不报错,能拿到vue相关的东西
const { commit } = useStore()
const route = useRoute()
const router = useRouter()
const submit = async () => {
// 这里面处理登录
try {
const data = await login()
message.success('登录成功')
// 登录成功后调用获取用户信息接口,这个接口里面有存储用户数据和跳转路由相关逻辑
/*
问题来了这个getUserInfo函数里面拿不到和vue相关的东西,比如store和路由,
我只有从这个传递参数才能拿到,如果这个参数很多,一个个传递很麻烦
其实我是想知道为什么这个useSubmitLogin能拿到vue相关的东西
而这个getUserInfo就拿不到呢
*/
getUserInfo(commit, route, router)
} catch (e) {}
}
return {
submit,
}
}
/*
这里是vue的页面
*/
import useSubmitLogin from './test'
setup() {
const { submit } = useSubmitLogin()
return{
submit,
}
}
写回答
2回答
-
我又查了查资料,忽然发现自己忽略了一个细节,就是:Vue3 要求,钩子函数(useStore useRoute等)必须在 setup 时触发。你的第一个函数没有用到 setup 中,所以报错了。
非常抱歉,这个疏忽导致问题拖了好几天~
112021-03-29 -
双越
2021-03-28
在拿不到的地方,如 useStore useRouter 等,你打印一下这个函数是啥?看看打印结果
另外,自定义函数最后要有 return
072021-03-29
相似问题
面试中被问到了这样两个问题
回答 1