React:如何添加 HTMLElement?

spb*_*bks 5 reactjs

我正在尝试在 React 组件中包装一个返回 HTMLElement 对象的外部库。

现在,我只是定义一个 ref 并像这样附加对象:

class MyComponent extends React.Component {
  constructor(props) {
    super(props)
    this.externalLibrary = new ExternalLibrary()
  }
  componentDidMount() {
    this.externalLibrary()
      .then(contents => this.div.appendChild(contents))
  }
  render() {
    <div ref={div => this.div = div} />
  }
}
Run Code Online (Sandbox Code Playgroud)

但是 AFAIU 这意味着 DOM 的那部分不会由 React 管理。添加 HTMLElement 的正确方法是什么?

Fad*_*lam 4

你需要使用angerlySetInnerHTML

  componentDidMount() {
    let self= this;
    this.externalLibrary()
      .then(contents => self.setState({contents}))
  }
  render() {
    <div dangerouslySetInnerHTML={{__html: this.state.contents}} />
      }
Run Code Online (Sandbox Code Playgroud)

  • `dangerouslySetInnerHTML` 设置 `innerHTML`,而不是子 `HTMLElement`。问题询问如何挂载现有 DOM 元素(例如通过“document.createElement”创建),而不是如何设置 React 元素的“innerHTML”。 (8认同)
  • 嗯,这只是打印“[object HTMLElement]”。它可以与“{__html: this.state.contents.innerHTML}”一起使用,但这似乎与调用appendChild()的作用相同,即React看不到DOM的这一部分。 (2认同)