react的函数式组件中使用ref获取到子组件的方法为undefined
我暂时遇到了两种情况。
第一种情况:useImperativeHandle函数写错
useImperativeHandle的第二个参数的返回值是作为ref.current的值,但是我写箭头函数写快了,忘记返回值了。
useImperativeHandle(ref, () => {foo}, [foo]) // 错误,这样没有返回值,所以ref.current为undefined
useImperativeHandle(ref, () => ({foo}), [foo]) // 正确,返回值为{foo}
第二种情况:组件一开始并未渲染(例如弹框)
这种情况我找了许久, 当一开始子组件还没用展示的时候,在触发某种条件才出现,这个时候绑定不到子组件,也就无法将子组件中的方法绑定到ref
上面。
const Father = forward((props = {}, ref) => {
const childrenRef = useRef()
const [flag, setFlag] = useSafeState(false)
const testChildren = useMemoizedFn(() => {
childrenRef.current?.onHellow()
})
return (<>
<Button onClick={() => setFlag(!flag)}>更换</Button>
<Button onClick={testChildren}>测试孩子方法</Button>
{flag?<Children ref={childrenRef} />:undefiend}
</>)
})
const Children = forward((props = {}, ref) => {
const onHellow = useMemoizedFn(() => {
console.log('hellow world!')
})
return (<>
我是孩子组件
</>)
})
行百里者半九十
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通