无法在 React 中使用 FontAwesome 在“节点”上执行“removeChild”

IT技术 reactjs font-awesome
2021-04-04 21:18:30

每当我尝试className='fa-spin'在 React 中使用 FontAwesome 微调图标(带有)时,都会收到以下错误

Uncaught DOMException: Failed to execute 'removeChild' on 'Node': The node to be removed is not a child of this node.
at removeChild (http://localhost:5000/public/bundle.js:19553:22)
at unmountHostComponents (http://localhost:5000/public/bundle.js:13683:11)
at commitDeletion (http://localhost:5000/public/bundle.js:13727:5)
at commitAllHostEffects (http://localhost:5000/public/bundle.js:14419:13)
at HTMLUnknownElement.callCallback (http://localhost:5000/public/bundle.js:5035:14)
at Object.invokeGuardedCallbackDev (http://localhost:5000/public/bundle.js:5074:16)
at invokeGuardedCallback (http://localhost:5000/public/bundle.js:4931:27)
at commitRoot (http://localhost:5000/public/bundle.js:14508:9)
at performWorkOnRoot (http://localhost:5000/public/bundle.js:15510:42)
at performWork (http://localhost:5000/public/bundle.js:15460:7)

编辑:这个问题现在已经出现了几次,并且代码本身并没有什么特别之处。我一直在使用微调器作为加载图标,每当微调器被内容替换时就会发生错误。例子:

return (
  <div>
    {this.state.loading === true ? <i className="fa-spin fas fa-sync"></i> : (
      this.state.recipes.length === 0 ? (
        <div className='text-center'>
          <h2>There doesn't seem to be anything here...</h2><br />
          <h2 style={buttonStyle}>Get started by </h2><button style={buttonStyle} className='btn btn-md btn-success' onClick={(e) => this.props.setView(e, 'browserecipes')}>browsing existing recipes</button><h2 style={buttonStyle}> or </h2><button style={buttonStyle} className='btn btn-success btn-md' onClick={(e) => this.props.setView(e, 'addrecipe')}>adding a recipe.</button>
        </div>
      ) : (
      <div>
          <h1 className='text-center title'>My Recipe Cloud</h1>
          <RecipeContainer
            recipes={this.state.recipes}
            user={this.state.user}
            tags={this.props.tags}
            setView={this.props.setView}
            changeUser={this.changeUser}
          />
        </div>
      )
    )}
  </div>

)

1个回答

我想我知道为什么会这样了。这似乎与 FontAwesome 5 用<i>标签替换标签的方式有关<svg>我相信这与 React 处理从 DOM 中删除元素的方式不兼容。见:https : //fontawesome.com/how-to-use/svg-with-js#with-jquery

我使用的解决方法在该文档的底部注明,其中包括:

<script>
  FontAwesomeConfig = { autoReplaceSvg: 'nest' }
</script>

我将它包含在我的标题中,它可能有更好的位置,但它似乎至少对我来说解决了这个问题。它可能会影响某些 CSS 逻辑,您可以针对任何专门针对 FontAwesome 元素的类,这些元素是其他类/id 的直接子元素,因此您可能只想检查以确保您的所有样式看起来都正确,因为它现在是嵌套的在<svg>该范围内标签<i>的标签,而不是取代它。

或者,您可以<i>自己包装标签。例如:

{this.state.loading === true ? <div><i className="fa-spin fas fa-sync"></i></div> ...

应该管用。

UPDATE(18年12月10日):现在有为什么这是在官方的文档发生的文档中更好的解释以及如何将这个FontAwesome用JavaScript库集成了一个解释这里自动嵌套<i>标签的方法现在在用于获取 FontAwesome javascript 库的脚本标签内完成<script src="https://use.fontawesome.com/releases/v5.5.0/js/all.js" data-auto-replace-svg="nest"></script>现在还有对FontAwesome React 库的官方支持,它也解决了这个问题。

谢谢,我有同样的问题,几乎疯了。将我的<i>另一个包裹在里面<span>确实解决了这个问题。
2021-05-29 21:18:30
2 小时后刮掉我的头发,我发现了这个:))谢谢
2021-06-12 21:18:30
这两种方法(FontAwesomeConfig 和包装<i>)也适用于我。我使用配置来保持标记干净。谢谢!
2021-06-13 21:18:30
谢谢,他们真的应该在他们的文档中提到 React,因为 React 不能很好地与修改 DOM 的库配合使用。我决定暂时使用 css/webfont 方法而不是 js/svg 方法。
2021-06-20 21:18:30