搜尋

首頁  >  問答  >  主體

Next.js中React水合錯誤 - "預期伺服器HTML中包含與<a>標籤相符的<a>標籤"

我正在處理一個Next.js項目,但我一直遇到一個hydration錯誤。我看到的具體錯誤訊息是:

錯誤:hydration失敗,因為初始UI與在伺服器端渲染時呈現的內容不符。

警告:期望伺服器HTML中包含符合的<div>。

我理解這可能是由於伺服器端渲染(SSR)HTML與React在客戶端進行hydration期間產生的HTML不匹配所致。警告提示在伺服器渲染的HTML中期望找到一個<div>標籤,但找不到。

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 (
    
      
        
          
             Item 1
          
        
        
           Item 2
        
        
           Item 3
        
        
           Item 4
        
      
    
  );
};

export default Home;

如何在NextJS 13中修復此錯誤?

P粉401901266P粉401901266433 天前817

全部回覆(1)我來回復

  • P粉129275658

    P粉1292756582023-09-20 15:06:12

    問題是由Next.js的元件造成的。我通過用標準的<a>標籤替換了該組件來修復它:

    <a href="/stock">
      <ListItem>
        <Icon1 size={70} />
        项目1
      </ListItem>
    </a>

    這樣在點擊連結時會強制進行整個頁面刷新,而不是像該元件那樣啟用客戶端導航。請注意,這是一個解決方法,可能會由於頁面重新載入而影響效能。

    回覆
    0
  • 取消回覆