使用hook时的我遇到的小问题

193 阅读2分钟

hello,这里是小菜不拖延博主,博主忙于上班,已经许久未进行更新了,最近一段时间的文章应该会围绕自己所遇到的问题,解决的过程为主啦

问题

问题描述:把逻辑集成到了hook,我的hook需要传入一个函数,在hook内部调用该方法,当我传入组件自身的方法时,可以正确调用,但是传入子组件方法时无法调用。函数传入一个方法,该方法没有执行

image.png

复现代码

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))