html - 为什么在 Next.js 中使用表格会引发水合作用错误?

标签 html reactjs next.js html-table

在这段代码中,我在使用标签时遇到了问题。当我使用 tr 标记时发生错误。它说 Unhandled Runtime Error 错误:Hydration 失败,因为初始 UI 与服务器上呈现的内容不匹配。

import React from 'react'
import {useState} from 'react'


const port = () => {
  return (
    <div className="ml-14">
      <div className="profile">
        <h1 className="mt-5 font-bold">Nasvirat</h1>
        <p className="mt-5">total balance : </p>
      </div>
      <div className="portfolio">
        <h2 className="mt-7">Holding</h2>

        <table>
        <tr>
          <th>Firstname</th>
          <th>Lastname</th>
        </tr>
        <tr>
          <td>Peter</td>
          <td>Griffin</td>
        </tr>
        <tr>
          <td>Lois</td>
          <td>Griffin</td>
        </tr>
        </table>
      </div>
    </div>
  )
}

export default port

您是否知道为什么会发生这种情况以及如何解决它。

最佳答案

这是一个 open issueNext.js repo 。问题是因为您没有 <tbody><thead>包装你的行。

虽然它们没有指定给mandatory为了正确呈现表格,next.js不知何故无法识别这一点。

我的假设是,因此在服务器和客户端上运行的代码存在差异。

尝试添加这个:

        <table>
        <tbody>
        <tr>
          <th>Firstname</th>
          <th>Lastname</th>
        </tr>
        <tr>
          <td>Peter</td>
          <td>Griffin</td>
        </tr>
        <tr>
          <td>Lois</td>
          <td>Griffin</td>
        </tr>
        </tbody>
        </table>

值得注意的是,浏览器添加了一个 tbodytable里面automatically .所以即使你跳过它,它最终也会出现在你的 DOM 代码中。这适用于答案中提到的旧 HTML 版本。这是一个demo为了那个原因。检查代码并将其与呈现的实际 DOM 进行比较。

我猜 next.js不添加 tbody默认情况下在服务器端生成时。 这就是导致不匹配的原因。

关于html - 为什么在 Next.js 中使用表格会引发水合作用错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73890509/

相关文章:

javascript - 未创建 React.js 组件

reactjs - 如何在 _document 中添加自定义属性和扩展 DocumentInitialProps 类型?

javascript - Next.JS 与 framer-motion 不会更改导航内容

javascript - 在javascript中使用子字符串清除字符串的最后一个字母

html - 设置溢出-x : hidden adds a vertical scrollbar

reactjs - 创建新的 react 应用程序时如何停止权限

javascript - NextJs - 改进 "Total Blocking Time"Google Pagespeed

javascript - 如何仅当用户在 div 上滚动时显示滚动条

javascript - 拨动开关 - 当我启用另一个按钮时禁用一个按钮

javascript - array.map 不是函数