Repro of a hydration error in react-data-table-component's Pagination element.
- Live demo: react-data-table-hydration-bug.runsascoded.com
- Workaround: react-data-table-component#1227.
When the client window width is < 599px or undefined (as during SSR), "rows per page" in the pagination footer is omitted. This causes a hydration error whenever the client window width is ≥599, as it is omitted on the server but rendered on the client.
Hydration error iff window.innerWidth < 599
react-data-table-hydration-bug.runsascoded.com was built and deployed via GitHub Actions, and the error is visible in the dev console:
import DataTable from "react-data-table-component"; import ReactMarkdown from "react-markdown"; import fs from "fs"; export function getStaticProps() { return { props: { readme: fs.readFileSync("README.md").toString() } } } const Index = ({ readme }: { readme: string }) => <div className={"markdown-body"}> <ReactMarkdown>{readme}</ReactMarkdown> <DataTable columns={[ { name: "Str" }, { name: "Num" } ]} data={[ { Str: "A", Num: 1 } ]} // This line causes a hydration error in the pagination footer "nav" element (iff the // browser window is ≥599px wide); commenting this line fixes it. pagination /> </div> export default Index
The error in the dev console links to react#418:
Uncaught Error: Minified React error #418; visit https://reactjs.org/docs/error-decoder.html?invariant=418 for the full message or use the non-minified dev environment for full errors and additional helpful warnings.
at lg (framework-5eea1a21a68cb00b.js:9:46336)
at i (framework-5eea1a21a68cb00b.js:9:121103)
at oD (framework-5eea1a21a68cb00b.js:9:99070)
at framework-5eea1a21a68cb00b.js:9:98937
at oO (framework-5eea1a21a68cb00b.js:9:98944)
at ox (framework-5eea1a21a68cb00b.js:9:93983)
at x (framework-5eea1a21a68cb00b.js:33:1364)
at MessagePort.T (framework-5eea1a21a68cb00b.js:33:1894)
Dev mode gives more details about the error (namely that it occurs in a hierarchy like <nav>...<span> in react-data-table-component's pagination footer):
git clone https://github.com/runsascoded/react-data-table-hydration-bug && cd react-data-table-hydration-bug pnpm install npm run dev
localhost:3000 will show something like:
Error text:
Unhandled Runtime Error
Error: Hydration failed because the initial UI does not match what was rendered on the server.
See more info here: https://nextjs.org/docs/messages/react-hydration-error
Expected server HTML to contain a matching <span> in <nav>.
...
<O>
<nav>
^^^^^
<O>
<span>
^^^^^^
Commenting out the pagination property avoids the issue; react-data-table-component#649 and this StackOverflow describe the same.