记录react-connect中使用forwardRef 遇到的问题

项目场景:

之前独立的两个tab,  tab1和tab2,  由于需求变更,  要把这两个tab都放到一个tab4下, 变化大概是从图1变为图2


 原因: 

        子组件用了使用了connect, 相当于把forwardRef隔离了,导致父组件拿不到想要的方法, 所以需要把forwardRef 透传给使用了connect 的子组件  

问题描述:

       tip:  该文章以下内容中说的子组件指tab1和tab2,  父组件指tab4

       tab1和tab2组件都有"更新数据"按钮,将他们合并为tab4里面之后,"更新数据"按钮已经变成了父组件(tab4)的内容, 但是由于按钮的onClick事件中的逻辑太复杂,  所以点击事件没有挪出来重新写到父组件里。也就是:按钮在父组件中,  按钮的点击事件在子组件里写。

        子组件和父组件都是用函数组件 + Hook 写的, 并且子组件中用了connect,  此时父组件想调用子组件的点击事件方法,  该怎么拿到子组件里的方法呢?


解决方案:

        tip:  我的项目使用的是umi2

        利用Hoc(高阶组件)透传ref

import React, { forwardRef, useImperativeHandle, useState, useEffect } from 'react';
import { connect } from 'dva'
const Children = (props) => {
  const { refInstance } = props
   
  const [text, setText] = useState('子组件:Children')
  const functionA = () => {
    console.log('c2方法')
    setText('ref改变了')
  }

  useImperativeHandle(refInstance, () => ({
    functionA,
    text,
  }))

  
return (
    <div>
      {text}
    </div>
)}

const newA =  connect((state) => {
  return {
    list: state.list,
  }
})(Children)
// 使用Hoc 透传 ref
export default forwardRef((props, ref) => <newA  {...props} refInstance={ref} />);
  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 14
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值