美文网首页
ref无法获取到组件实例引用

ref无法获取到组件实例引用

作者: 曾經丶記憶的風景 | 来源:发表于2020-05-08 15:02 被阅读0次

最近在使用react-intl国际化中,发现使用injectIntl,ref无法获取到组件实例了,最后搜索了以下,是因为:在React中,我们都会用到HOC(高阶组件),它会返回一个新的高阶组件,若用ref就不能访问到我们真正需要的被包裹的组件实例,我们访问到的其实是高阶组件实例,因而:

若HOC不做特殊处理,ref是无法访问到低阶组件实例的

若要解决这个问题,以下有两中方法:

1、添加参数withRef,组件中检查到这个flag了,就给下级组件添加一个ref,并通过getWrappedInstance方法获取

例子

// 添加withRef参数
export default injectIntl(MainContainer, { withRef: true })

// 组件中使用
<MainContainer ref={f => { this.container = f }} />

this.container.getWrappedInstance()

2、父组件中传递一个方法来获取ref

// 父组件
class ParentComponent extends React.Component {
  
  getInstance = (ref) => {
    this.wrappedInstance = ref
  }

  render() {
    return <CustomizeComponent getInstance={this.getInstance} />
  }
}

HOC里面把getInstance方法当作ref的方法传入就好

function HOCFactory(wrappedComponent) {
  return class HOC extends React.Component {
    render() {
      let props = {
        ...this.props
      }

      if(typeof this.props.getInstance === "function") {
        props.ref = this.props.getInstance
      }

      return <wrappedComponent {...props} />
    }
  }
}

export default HOCFactory(CustomizeComponent)

相关文章

  • ref无法获取到组件实例引用

    最近在使用react-intl国际化中,发现使用injectIntl,ref无法获取到组件实例了,最后搜索了以下,...

  • Vue的ref的使用

    一.什么是ref ? ref用来辅助我们获取DOM元素或组件的引用实例对象,每个vue的组件实例上,都包含一个re...

  • react中使用ref属性

    react提供ref属性,主要是为了对组件真正实例的引用,其实是ReactDOM.render()返回的组件实例;...

  • 7.vue组件

    1.is标签 非根组件的data ref引用 ref组件引用

  • react组件引用传值

    组件引用 ref:需要引用的组件 refs:父级中引用的所有ref组件 子组件中的ref不能重复,如果重复了在re...

  • react ref获取真实dom

    之前一直用ref获取,没觉得有什么问题,但是获取封装的组件获取到的却是React对象,而不是dom元素。 ref获...

  • vue关于父组件调用子组件的方法

    我们都知道通过$ref可以获取到某个DOM,但是它也可以用来获取子组件的实例,调用子组件的方法 例:子组件: 父组...

  • React之ref

    React提供的这个ref属性,表示为对组件真正实例的引用,其实就是ReactDOM.render()返回的组件实...

  • React Refs

    终于看到最后一章了。你可以通过使用 this 来获取当前 React 组件,或使用 ref 来获取组件的引用,实例...

  • Vue 组件

    全局组件引入 局部组件引入 ref获取dom节点、获取组件引用 ref在html元素获取的是dom节点ref在组件...

网友评论

      本文标题:ref无法获取到组件实例引用

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