【问题标题】:How do we break HTML semantics by using <div> in ReactJs (Jsx)我们如何通过在 ReactJs (Jsx) 中使用 <div> 来打破 HTML 语义
【发布时间】:2019-03-27 08:36:54
【问题描述】:

ReactJs 文档说:

有时,当我们将&lt;div&gt; 元素添加到我们的 JSX 让我们的 React 代码工作,尤其是在处理列表时 (&lt;ol&gt;, &lt;ul&gt; and &lt;dl&gt;) 和 HTML &lt;table&gt;。在这些情况下,我们应该 而是使用 React Fragments 将多个元素组合在一起。

参考:https://reactjs.org/docs/accessibility.html

我真的很想了解我们如何通过使用&lt;div&gt; 或上述其他元素来打破 HTML 语义,以及 React Fragments 如何对此进行改进。

另外,我想了解破坏这种语义可能会出现什么问题。

提前致谢。

【问题讨论】:

  • 有些元素不应该是 html 中其他元素的子元素。例如,锚标签不应该嵌套。或者ul 不能有div 作为孩子。 &lt;React.Fragment&gt; 元素告诉 react 在当前组件的根级别有多个元素。然而,React 需要有一个根级元素。大多数开发人员会在呈现列表项的组件周围放置一个 div(例如),以解决必须有父级的问题。但这会用额外的divs 和有时无效的子 HTML 元素破坏 DOM

标签: html reactjs


【解决方案1】:

假设您有一个

    元素,并且您想在其中插入几个
  • 标签。 React 元素只能有一个根节点,所以首先想到的是将所有
  • 标签包装在
    中,例如以下:
      const element = () => {
         return (
           <div>
             <li>Some list item</li>
             <li>Some other list item</li>
           </div>
         );
      };
    
      ReactDOM.render(element, document.getElementById('root'));
    

    这将产生以下 HTML:

    <ul id="root">
        <div>
            <li>Some list item</li>
            <li>Some other list item</li>
        <div>
    </ul>
    

    现在我们成功打破了 HTML 语义,在 ul 元素中直接包含 div 是无效的 HTML。避免这种情况的一种方法是使用 React Fragments

      const element = () => {
         return (
           <Fragment>
             <li>Some list item</li>
             <li>Some other list item</li>
           </Fragment>
         );
      };
    
      ReactDOM.render(element, document.getElementById('root'));
    

    片段不会插入额外的 HTML 标签,这不会破坏语义。这是生成的 HTML

    <ul id="root">
        <li>Some list item</li>
        <li>Some other list item</li>
    </ul>
    

  • 【讨论】:

    • 优秀的答案,一句话:“现在我们成功地打破了 HTML 语义”——也许你可以在这里强调,在 ul 元素中直接包含 div 是无效的 HTML
    • @Patrick Hund:我的印象是“语义”是文档开头使用的错误词......正如您所指出的,这完全是有效标记的问题,而“破坏语义”这个短语本身并没有多大意义。
    猜你喜欢
    • 1970-01-01
    • 2016-08-07
    • 1970-01-01
    • 1970-01-01
    • 2017-11-22
    • 2012-06-06
    • 2018-10-31
    • 1970-01-01
    • 2021-05-20
    相关资源
    最近更新 更多