React 中的 DOM 节点是否有与 Angular“slots”对应的东西?

约翰·高飞

目标是在 React 中创建一个 W3C Web 组件,它支持任意 DOM 节点作为子节点。

浏览器中的初始标记应该是这样的:

  <custom-button>
    some <u>styled</u> text here
  </custom-button>

然后我会:

  • 调用customElements.define()将我的 React 代码注册为custom-button,
  • 在实现内部创建一个影子根<custom-button>
  • 之后调用ReactDOM.render(<CustomButton ...>, shadowRoot);填充此阴影根

浏览器中的 DOM 结构现在是:

  <custom-button>
    #shadow-root
      <div class="CustomButton">
        <!-- x -->
      </div>
    some <u>styled</u> text here
  </custom-button>

但这并不是真正想要的结果;我现在需要在<custom-button>里面渲染的原始内容<div class="CustomButton">

我知道 Reactchildren道具,但据我所知,它仅适用于也在 React 实现中声明的子级,而不适用于在周围 Web 组件元素上创建的任意 DOM 节点。

另一方面,我读到 Angular 实现了一个他们称之为“transclusion”的概念,在这个概念中,他们提供了slots将映射到哪个 DOM 子 Web 组件。React 中有没有类似的东西?

我可以在 React 中想到的一种快速“解决方法”是:

  • 获取ref顶级 JSX 标签的,
  • 找到影子根 ref.parentNode
  • 遍历所有子级并将它们重新附加到ref新父级

不过,这只会涵盖初始化。如果在运行时,其他一些脚本试图将更多子项附加到<custom-button>,或者重新排序或删除以前插入的子项,这可能会失败。

约翰·高飞

我刚刚意识到<slot />web 组件标准的 解决了这个问题。

所以,要反映<custom-element>React 组件内部的内容,以下就完全够了:

  render() {
    return (
      <div className="customElement">
        ...
        <slot />
        ...
      </div>
    );
  }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

阻止特定属性在React JS中的DOM节点上呈现

来自分类Dev

从React JS中的“根” DOM节点获取数据属性

来自分类Dev

如何从React数据流中更改更高的DOM节点?

来自分类Dev

是否可以在React的Virtual DOM中添加元素,但使用jQuery附加到真实DOM?

来自分类Dev

是否可以在React的Virtual DOM中添加元素,但使用jQuery附加到真实DOM?

来自分类Dev

在非React应用程序中安装/卸载React组件时,请保留DOM节点的引用

来自分类Dev

React中的dom ready事件

来自分类Dev

在DOM中渲染React组件

来自分类Dev

React中的JavaScript修改DOM

来自分类Dev

AngularJS:禁止在Angular表达式中引用DOM节点

来自分类Dev

AngularJS:禁止在Angular表达式中引用DOM节点

来自分类Dev

Vue.js中是否有类似React中的createContext之类的东西?

来自分类Dev

Cycle.js(virtual-dom)是否支持React的refs或mithril的config属性之类的东西?

来自分类Dev

向仅一个DOM节点的React组件中添加Segment Telemtry

来自分类Dev

在 React.js 中的多个 DOM 节点上绑定多个事件

来自分类Dev

从d3选择中获取所有dom节点

来自分类Dev

在DOM中获取以下节点

来自分类Dev

写入 dom 中的输入节点

来自分类Dev

Angular 中的 Dom 操作

来自分类Dev

从React子元素获取DOM节点

来自分类Dev

从React Hooks GET映射DOM节点

来自分类Dev

React-Admin AutocompleteInput中是否有类似于Material-UI Autocomplete freeSolo的东西

来自分类Dev

React是否会自动修剪已从DOM中删除其挂载点的组件?

来自分类Dev

如何在React中读取DOM

来自分类Dev

如何在React中附加到dom?

来自分类Dev

LeafletJS中的React和真正的DOM合作

来自分类Dev

使用api在React DOM中的并排控件

来自分类Dev

JSX 中的虚拟 DOM 操作(React)

来自分类Dev

react-router-dom:如何在Switch中拥有多个具有各自路径的“外壳”?

Related 相关文章

  1. 1

    阻止特定属性在React JS中的DOM节点上呈现

  2. 2

    从React JS中的“根” DOM节点获取数据属性

  3. 3

    如何从React数据流中更改更高的DOM节点?

  4. 4

    是否可以在React的Virtual DOM中添加元素,但使用jQuery附加到真实DOM?

  5. 5

    是否可以在React的Virtual DOM中添加元素,但使用jQuery附加到真实DOM?

  6. 6

    在非React应用程序中安装/卸载React组件时,请保留DOM节点的引用

  7. 7

    React中的dom ready事件

  8. 8

    在DOM中渲染React组件

  9. 9

    React中的JavaScript修改DOM

  10. 10

    AngularJS:禁止在Angular表达式中引用DOM节点

  11. 11

    AngularJS:禁止在Angular表达式中引用DOM节点

  12. 12

    Vue.js中是否有类似React中的createContext之类的东西?

  13. 13

    Cycle.js(virtual-dom)是否支持React的refs或mithril的config属性之类的东西?

  14. 14

    向仅一个DOM节点的React组件中添加Segment Telemtry

  15. 15

    在 React.js 中的多个 DOM 节点上绑定多个事件

  16. 16

    从d3选择中获取所有dom节点

  17. 17

    在DOM中获取以下节点

  18. 18

    写入 dom 中的输入节点

  19. 19

    Angular 中的 Dom 操作

  20. 20

    从React子元素获取DOM节点

  21. 21

    从React Hooks GET映射DOM节点

  22. 22

    React-Admin AutocompleteInput中是否有类似于Material-UI Autocomplete freeSolo的东西

  23. 23

    React是否会自动修剪已从DOM中删除其挂载点的组件?

  24. 24

    如何在React中读取DOM

  25. 25

    如何在React中附加到dom?

  26. 26

    LeafletJS中的React和真正的DOM合作

  27. 27

    使用api在React DOM中的并排控件

  28. 28

    JSX 中的虚拟 DOM 操作(React)

  29. 29

    react-router-dom:如何在Switch中拥有多个具有各自路径的“外壳”?

热门标签

归档