代码之家  ›  专栏  ›  技术社区  ›  Ajay Gaur

如何在react中对HOC使用refs?

  •  0
  • Ajay Gaur  · 技术社区  · 6 年前

    我有一个组件(用HOC包装),它被安装在我的应用程序的几个地方。我必须添加一些自定义事件,例如 drag , dragLeave 等使用 node.addEventListener 在里面 ComponentDidMount ComponentWillUnmount node.addEventListener refs ?

    export default function Connector() {
        return function wrap(WrappedComponent) {
            class MyComponent extends PureComponent {
                componentDidMount(){
                    //find node here and attach event listener
                }
                componentWillUnmount(){
                    //remove event listener
                }
                ....
                render() {
                   <WrappedComponent 
                       {...this.props}
                   />
                }
            }
        }
    }
    

    编辑 ReactDOM.findDOMNode 在这里

    1 回复  |  直到 6 年前
        1
  •  4
  •   Amree    5 年前

    向WrappedComponent添加一个ref,然后找到DOM实例

    export default function Connector() {
        return function wrap(WrappedComponent) {
            class MyComponent extends PureComponent {
                componentDidMount(){
                    //find node here and attach event listener
                    this.node = ReactDOM.findDOMNode(this.componentRef);
    
                }
                componentWillUnmount(){
                    //remove event listener
                }
    
                ....
                render() {
                   <WrappedComponent 
                       {...this.props}
                       ref={(ref) => this.componentRef = ref}
                   />
                }
            }
        }
    }
    

    另一种方法是将prop innerRef传递给WrappedComponent,并将其留给WrappedComponent将ref传递给DOM节点

       <WrappedComponent 
            {...this.props}
            innerRef={(ref) => this.componentRef = ref}
       />
    

    然后在WrappedComponent中

     render() {
         return (
            <div ref={this.props.innerRef}>{/* */}</div>
         )
      }