什么是水合
# 服务端
import { renderToString } from 'react-dom/server';
const html = renderToString(<App />);
# 客户端
import { hydrateRoot } from 'react-dom/client';
hydrateRoot(document.getElementById('root'), <App />);
常见的水合错误
解决方法
最后更新于
# 服务端
import { renderToString } from 'react-dom/server';
const html = renderToString(<App />);
# 客户端
import { hydrateRoot } from 'react-dom/client';
hydrateRoot(document.getElementById('root'), <App />);
最后更新于
export default function App() {
return (
<p>
text1
<p>text2</p>
</p>
);
}"use client";
export default function App() {
const isClient = typeof window !== "undefined";
return <h1>{isClient ? "Client" : "Server"}</h1>;
}"use client";
export default function App() {
return (
<h1>
{typeof localStorage !== "undefined" ? localStorage.getItem("name") : ""}
</h1>
);
}"use client";
export default function App() {
return <h1>{Date.now()}</h1>;
}import { useEffect, useState } from "react";
export default function App() {
const [time, setTime] = useState(Date.now());
useEffect(() => {
const timer = setInterval(() => {
setTime(Date.now());
}, 1000);
return () => {
clearInterval(timer);
};
}, []);
return <h1>{time}</h1>;
}import dynamic from "next/dynamic";
export default function App() {
const DynamicComponent = dynamic(() => import("./DynamicComponent"), {
ssr: false,
});
return <DynamicComponent />;
}export default function App() {
return (
<div suppressHydrationWarning>
{typeof window !== "undefined" ? "Client" : "Server"}
</div>
);
}