hello,这里是小菜不拖延博主,博主忙于上班,已经许久未进行更新了,最近一段时间的文章应该会围绕自己所遇到的问题,解决的过程为主啦
问题
问题描述:把逻辑集成到了hook,我的hook需要传入一个函数,在hook内部调用该方法,当我传入组件自身的方法时,可以正确调用,但是传入子组件方法时无法调用。函数传入一个方法,该方法没有执行
复现代码
hooks
export const hook(visible,funcHook:(boolean:boolean)=>void)=>{
funcHook(false);
}
father
<son ref='son'/>
funFa(visible){
console.log("father")
}
//正常
hook(true,funFa)
//显示没有funSon
hook(true,son.value?.funSon(true))
son
funSon(visible){
console.log("son")
}
defineExpose({funSon})
解决
已经排除了,没有获取实例,没有正确导入等问题
- 问题1: 传入的必须要是一个可执行的函数,ref这样获取,还要再传一遍,感觉有点问题(更具体的原因我还不太明白,欢迎大佬指正),根据朋友的描述,建议我把sonFun这个函数,在内加一层return,让其返回一个可执行的函数。改成下面这样,不会报错funSon不存在了,但是仍然没有触发sonFun
father
hook(true,()=>son.value?.funSon(true))
- 问题二: 这里我是偶然发现的,我发现我不太分得清楚,我究竟是要在用scene1,还是scene2,因为我每个组件传入他们的参数不一定都是false,还有true的。最后调试发现,scene2是正常运行的,scene1不能正常运行,我就突然意识到了这个参数问题
scene1:
\\hooks
export const hook(visible,funcHook:(boolean:boolean)=>void)=>{
funcHook();
}
father
hook(true,funFa(false))
scene1:
\\hooks
export const hook(visible,funcHook:(boolean:boolean)=>void)=>{
funcHook(false);
}
\\father
hook(true,funFa)
所以最后改成以下成功执行,你传入的方法,必须和你hook里面定义的方法类型一样
hooks
export const hook(visible,funcHook:(boolean:boolean)=>void,booleanVisible:boolean)=>{
funcHook(booleanVisible);
}
father
hook(true,(booleanVisible)=>son.value?.funSon(booleanVisible))