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 (<>
    我是孩子组件
  </>)
})

posted @   卿六  阅读(914)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示