javascript - html中的data-reactid属性是什么?

标签 javascript html reactjs

当我浏览一些页面的 HTML 时,我注意到其中一些使用了“data-reactid”属性,例如:

 <a data-reactid="......" ></a>

那个属性是什么,它的功能是什么?

最佳答案

data-reactid 属性是一个自定义属性,因此 React可以在 DOM 中唯一标识其组件。

这很重要,因为 React 应用程序可以是 rendered at the server以及客户。 React 在内部构建了对构成应用程序的 DOM 节点的引用的表示(简化版本如下)。

{
  id: '.1oqi7occu80',
  node: DivRef,
  children: [
    {
      id: '.1oqi7occu80.0',
      node: SpanRef,
      children: [
        {
          id: '.1oqi7occu80.0.0',
          node: InputRef,
          children: []
        }
      ]
    }
  ]
}

无法在服务器和客户端之间共享实际的对象引用,并且发送整个组件树的序列化版本可能代价高昂。当应用程序在服务器端呈现并在客户端加载 React 时,它拥有的唯一数据是 data-reactid 属性。

<div data-reactid='.loqi70ccu80'>
  <span data-reactid='.loqi70ccu80.0'>
    <input data-reactid='.loqi70ccu80.0' />
  </span>
</div>

它需要能够将其转换回上面的数据结构。它这样做的方式是使用独特的 data-reactid 属性。这称为膨胀组件树。

您可能还会注意到,如果 React 在客户端呈现,它会使用 data-reactid 属性,即使它不需要丢失其引用。在某些浏览器中,它会使用 .innerHTML 将您的应用程序插入到 DOM 中,然后立即扩充组件树,以提高性能。

另一个有趣的区别是,客户端呈现的 React id 将具有增量整数格式(如 .0.1.4.3),而服务器呈现的将以随机字符串为前缀(例如作为 .loqi70ccu80.1.4.3)。这是因为应用程序可能会在多个服务器上呈现,并且没有冲突很重要。在客户端,只有一个渲染进程,这意味着可以使用计数器来确保唯一的id。

React 15 uses document.createElement instead ,因此客户端呈现的标记将不再包含这些属性。

关于javascript - html中的data-reactid属性是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17585787/

相关文章:

javascript - extjs 类型错误 el 为空

java - 如何将多个模型属性添加到一个模型属性中?

reactjs - ReactJS浏览器应用程序看不到Docker Compose网络中的内容

reactjs - 使用 redux-saga 时,参数不会从组件传递到操作

html - 使 div 填充所有浏览器高度而没有子 div 溢出父级

reactjs - 无法在react-native-web 上运行webpack-dev-server。错误: You may need an appropriate loader to handle this file type

javascript - 为什么我*只能*访问 setInterval 内的对象属性?

javascript - Cognos 10 身份验证和样式设置

iphone - iOS4 iPhone 离线 Web 应用程序上的 HTML5 音频无法播放?

jquery - 将这个 CarouFredSel 旋转木马居中