【问题标题】:Return DOM element in render function of React component在 React 组件的渲染函数中返回 DOM 元素
【发布时间】:2017-10-09 15:44:39
【问题描述】:

我有一个呈现一些自定义 js 控件的外部库。该库返回一个可以插入到页面中的 DOM 元素。

我正在 React 中为这个库创建包装器。除了我不确定如何允许渲染函数接受 DOM 元素作为它的返回之外,我已经把它全部连接起来了

render() {
 if (this.state.someType) {
   let customControl = new this.state.someType();
   var node = customControl.getNode(); 

   return node; //This is an HTMLDOMElement i.e. div or span
 }

 return <div>Loading Custom Control...</div>;
}

我能够调试代码并且一切正常。该节点是我所期望的,但页面上的 html 永远不会被替换。

【问题讨论】:

    标签: javascript reactjs dom


    【解决方案1】:

    这是一个简单的例子。

    render() {
       const newNode = document.createElement('p'); 
       return <div ref={(nodeElement) => {nodeElement && nodeElement.appendChild(newNode)}}/>
    }
    

    【讨论】:

    • ref 也会在元素被卸载时被调用,导致nodeElement 成为undefined 进行调用。你应该包括一张支票nodeElement &amp;&amp; nodeElement.appendChild...
    • 这是一个很好的答案,因为它包含可以与接受的答案一起使用的代码示例。上面关于 nodeElement 未定义的建议也很有帮助,可以包含在此代码示例中。
    【解决方案2】:

    渲染一个普通的 JSX div。在里面使用ref。

    在ref 回调中使用.appendChild(node)

    见https://reactjs.org/docs/refs-and-the-dom.html

    【讨论】:

      猜你喜欢
      • 2019-04-15
      • 2020-11-04
      • 1970-01-01
      • 2020-03-09
      • 1970-01-01
      • 2021-07-02
      • 2023-04-08
      • 2022-12-10
      • 1970-01-01
      相关资源
      最近更新 更多