【问题标题】:React ref: what is equal to document.querySelectorAll反应参考:什么等于 document.querySelectorAll
【发布时间】:2019-01-06 23:37:29
【问题描述】:

我刚开始使用 React refs,我想选择 ref=this.contentRef 的所有图标。 使用 js 我会这样做:document.querySelectorAll('.content i')。如何使用 ref 执行此操作?

someMethode() {
  const content = this.contentRef.current.childNodes;
  const content2 = document.querySelectorAll('.content i');
}

render() {
  return (
    <div ref={this.contentRef} className="content">
      <div>
        <i className="fa fa-square" />
      </div>
      <div>
        <i className="fa fa-square" />
      </div>
      <div>
        <i className="fa fa-square" />
      </div>
    </div>
  )
}

【问题讨论】:

    标签: reactjs ref


    【解决方案1】:

    正确的做法是:

     &lt;MyComponent ref={(c) =&gt; this.myComponent = c} /&gt; // then check when this.myComponent is NOT undefined 

    问题在于您想对 refs 做什么。在调用子方法或为所有剩余情况进行计算(渲染大小等)时非常有用,有替代模式可以在没有参考的情况下完成这项工作

    【讨论】:

    • 这可能会导致它为空的问题——这是一个警告,每次更新都会安装和卸载组件。 “如果 ref 回调被定义为内联函数,它将在更新期间被调用两次,第一次使用 null,然后再次使用 DOM 元素。这是因为每次渲染都会创建一个新的函数实例,所以 React 需要清除旧的 ref 并设置新的。您可以通过将 ref 回调定义为类上的绑定方法来避免这种情况,但请注意,在大多数情况下这无关紧要。 source
    • 你必须检查它不为空或未定义,那么不会出现问题。尝试访问 ref 时执行这些检查是一种常见模式。
    【解决方案2】:

    您实际上可以将 QuerySelectorall 与 ReactDOM.findDOMNode(this) 一起使用 尝试这样的事情

    const node = ReactDOM.findDOMNode(this);
    // Get child nodes
    if (node instanceof HTMLElement) {
    const child = node.querySelector('.someClass');
    }
    

    【讨论】:

    猜你喜欢
    • 2023-03-22
    • 2020-02-18
    • 2019-09-23
    • 2020-03-10
    • 1970-01-01
    • 2018-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-29
    相关资源
    最近更新 更多