美文网首页
react: React.forwardRef

react: React.forwardRef

作者: 前端的爬行之旅 | 来源:发表于2020-07-08 11:07 被阅读0次

关键点就是React.forwardRef的API中ref必须指向dom元素而不是React组件。

一、React.forwardRef使用示例

下面就是应用到React组件的错误示例:

const A=React.forwardRef((props,ref)=><B {...props} ref={ref}/>)

前面提到ref必须指向dom元素,那么正确方法就应用而生:

const  A=React.forwardRef((props,ref)=>(
<div ref={ref}>
<B {...props} />
</div>
))

二、React.forwardRef应用到高阶组件中

2.1 withComponent类型的高阶组件
import React from 'react'
import A from './a.jsx'
import PropTypes from 'prop-types';

function withA(Component){
    const ForWardedComponent = React.forwardRef((props, ref) => <div ref={ref}>
               <Component {...props} />
           </div>);
     class MidComponent extends React.Component {
        render() {
            const props = this.props
            return (
                <A {...props}>
                  <ForWardedComponent  ref={props.forwardedRef} {...props}/>
            </A>
            )
        }
    }

    //对MidComponent组件属性进行类型经查 
    MidComponent.propTypes = {
        forwardedRef: PropTypes.object,
    }
    return  MidComponent
}
exports.withA=withA

这样,在上述示例的组件A中,A的周期componentDidMount()调用 this.props.forwardedRef.current ,指向的就是上述示例中ForWardedComponent对应的dom元素。
是B组件对应的dom的父元素,而不是该dom
在a.jsx中某处:

    componentDidMount(){
     console.log(this.props.forwardedRef.current)
    }

最后应用实例:

import React from 'react'
import ReactDOM from  'react-dom'
//假设withA存储于withA.js文件。
import {withA}   from  './withA.js'  
 const B=()=><h2>hello world</h2>
const B2=withA(B)
class App extends React.Component {
      constructor(props) {
        super(props)
        this.forwardedRef=React.creactRef()        
        }

        render() {
           return  <div>
               <B2  forwardedRef={this.forwardedRef}/>
           </div>
        }
}

ReactDOM.render(<App/>,document.getElementById('app'))

2.2 纯粹的高阶组件(Parent-Child)

2.1中并不是React组件,只是一个React组件为参数的函数,调用以后才成为React组件。那么直接写入一个Parent组件又该如何呢?

import React from 'react'
import A from './a.jsx'
import PropTypes from 'prop-types';

function AasParent(props){
    const ForWardedComponent = React.forwardRef((props, ref) => <div ref={ref}>
               {props.children}
           </div>);
      return (
                <A {...props}>
                  <ForWardedComponent  ref={props.forwardedRef} {...props}/>
            </A>)
}
AasParent.propTypes = {
        forwardedRef: PropTypes.object,
    }

module.exports=AasParent

最后应用实例:

import React from 'react'
import ReactDOM from  'react-dom'
//假设AasParent存储于AasParent.jsx文件。注意与【1】中的区别
import AasParent   from  './AasParent.jsx'  
 const B=(props)=><h2>{props.greetings}</h2>

class App extends React.Component {
      constructor(props) {
        super(props)
        this.forwardedRef=React.creactRef()        
        }

        render() {
           return  <AasParent forwardedRef={this.forwardedRef}>
               <B2  greetings="你好,Melo"/>
           </AasParent>
        }
}

ReactDOM.render(<App/>,document.getElementById('app'))

三、总结

  1. React.forwardRef的API中ref必须指向dom元素而不是React组件。
  2. 在【1】的组件A中,A的周期componentDidMount() 调用 this.props.forwardedRef.current ,指向的就是【1】中ForWardedComponent对应的dom元素。是【1】中B组件对应的dom的父dom元素,而不是该dom。
    参考链接:https://segmentfault.com/a/1190000018957342

相关文章

  • react ref

    在 React16 新版本中,新引入了 React.createRef 与 React.forwardRef 两个...

  • react: React.forwardRef

    关键点就是React.forwardRef的API中ref必须指向dom元素而不是React组件。 一、React...

  • React.forwardRef

    forwardRef,咋一看长的和useRef很像,既然很像,那么功能必定相似,因此猜想也是使用ref来引用一个D...

  • React.forwardRef 与useImperativeH

    React.forwardRef 与useImperativeHandle结合使用,就能调用方法组件内的方法, 父...

  • React.forwardRef和connect的联合使用问题

    先使用 React.forwardRef;再使用 connect 包一层会使 ref 属性漏掉,导致 内部实例无法...

  • React.forwardRef和connect的联合使用

    先使用 React.forwardRef再使用 connect 包一层会使 ref属性漏掉,导致 内部实例无法传到...

  • 2022-07-04

    React.forwardRef会创建一个React组件,这个组件能够将其接受的ref属性转发到其组件树下的另一个...

  • 组件ref的使用

    自己封装的组件,想使用ref,调用内部的方法1.使用React.forwardRef,包裹组件。 2.接收ref属...

  • React中React.forwardRef的使用方式

    一、众多周知可以forwardRef可以转发ref属性比如要在父组件中调用子组件中某个DOM节点或者组件的ref ...

  • React基础

    react 教程 react 组件介绍 react state 介绍 react Props 介绍 React:组...

网友评论

      本文标题:react: React.forwardRef

      本文链接:https://www.haomeiwen.com/subject/xtvqcktx.html