react forward ref的使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了react forward ref的使用相关的知识,希望对你有一定的参考价值。

参考技术A

引用传递(Ref forwading)是一种通过组件向子组件自动传递 引用ref 的技术。对于应用者的大多数组件来说没什么作用。但是对于有些重复使用的组件,可能有用。例如某些input组件,需要控制其focus,本来是可以使用ref来控制,但是因为该input已被包裹在组件中,这时就需要使用Ref forward来透过组件获得该input的引用。

核心方法是React.forwardRef,该方法接受一个有额外ref参数的react组件函数,不调用该方法,普通的组件函数是不会获得该参数的。
如果子组件中用到了该方法,那么对应的高阶组件中也需要使用React.forwardRef方法

Refs 使用场景

React hook 中connect和forwardRef连用会导致传入子组件的ref失效

let Component = (props)=>{
    const {refInstance} = props;
    //  只要是实例都行useForm和useRef创建的都可以
    const [form] = Form.useForm();
    useImperativeHandle(refInstance,()=>({
       submit:()=>{
          form.submit();
       }
    }));
    return (
       <div>Hello Word</div>
    )
};
Component = connect(xxx, xxx)(Component);
//注意:这里不要在Component上使用ref;换个属性名字比如refInstance;不然会导致覆盖
export default React.forwardRef((props,ref) => 
    (<Component  {...props}  refInstance={ref} />));

查阅connect后发现使用connect的第四个参数也可实现

export default connect((state) => {
  return {
    list: state.list,
  }
}, null, null, { forwardRef: true })(C2)

以上是关于react forward ref的使用的主要内容,如果未能解决你的问题,请参考以下文章

【原创】react-源码解析 - forward-ref&context(4)

React hook 中connect和forwardRef连用会导致传入子组件的ref失效

启动ip转法功能

React中ref的使用

React ref

React 中ref的 React.createRef() 方法