我正在做一个Next.js项目,我一直遇到一个水合错误。我看到的具体错误消息是:
错误:由于初始UI与服务器上呈现的UI不匹配,因此水合失败。
警告:服务器HTML应在中包含匹配项。
我理解这可能是由于服务器端渲染(SSR)HTML和React在客户端生成的HTML之间的不匹配造成的。此警告表明,服务器呈现的HTML中应该有标记,但未找到。
import React from 'react';
import styled from 'styled-components';
import {
FaIcon1 as Icon1,
FaIcon2 as Icon2,
FaIcon3 as Icon3,
FaIcon4 as Icon4
} from 'react-icons/fa';
import Link from 'next/link';
const Container = styled.div`
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
height: 100vh;
background: #ffffff;
`;
const ListItemContainer = styled.div`
display: flex;
flex-direction: column;
align-items: center;
justify-content: space-between;
width: 70%;
overflow-y: auto;
@media (min-width: 768px) {
flex-direction: row;
}
`;
const ListItem = styled.div`
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
padding: 10px;
margin: 10px 10px;
font-size: 1.8em;
border: 1px solid #299d51;
border-radius: 5px;
cursor: pointer;
color: #14080e;
transition: background 0.3s;
width: 50vw;
min-height: 20vh;
text-align: center;
&:hover {
background: #4cb16b;
}
@media (min-width: 768px) {
width: 20vw;
}
svg {
color: #00722e;
margin-bottom: 20px;
}
`;
const Home: React.FC = () => {
return (
<Container>
<ListItemContainer>
<Link href="/route1">
<ListItem>
<Icon1 size={70} />
Item 1
</ListItem>
</Link>
<ListItem>
<Icon2 size={70} /> Item 2
</ListItem>
<ListItem>
<Icon3 size={70} /> Item 3
</ListItem>
<ListItem>
<Icon4 size={70} /> Item 4
</ListItem>
</ListItemContainer>
</Container>
);
};
export default Home;
字符串
如何在NextJS 13中修复此错误?
1条答案
按热度按时间a0zr77ik1#
该问题是由Next.js中的组件引起的。我通过将组件替换为标准标记来修复它:
字符串
这将在单击链接时强制刷新整个页面,这与启用客户端导航的组件不同。请注意,这是一种解决方法,可能会因页面重新加载而影响性能。