问题描述
webpack-internal:///./node_modules/react-dom/cjs/react-dom.development.js:67 警告:没想到服务器 HTML 包含 in 。 在 div 在样式(div)(webpack-internal:///./node_modules/@emotion/react/dist/emotion-element-4fbd89c5.browser.esm.js:44:73) 在 div 在样式(div)(webpack-internal:///./node_modules/@emotion/react/dist/emotion-element-4fbd89c5.browser.esm.js:44:73) 在 Flex (webpack-internal:///./node_modules/@chakra-ui/layout/dist/esm/flex.js:25:5) 在 NavBar (webpack-internal:///./src/components/NavBar.tsx:31:142) 在索引 (webpack-internal:///./src/pages/index.tsx:25:96) 在 withUrqlClient(Index) (webpack-internal:///./node_modules/next-urql/dist/next-urql.es.js:50:28) 在 ColorModeProvider (webpack-internal:///./node_modules/@chakra-ui/color-mode/dist/esm/color-mode-provider.js:46:5) 在 ThemeProvider (webpack-internal:///./node_modules/@emotion/react/dist/emotion-element-4fbd89c5.browser.esm.js:78:71) 在 MyApp (webpack-internal:///./src/pages/_app.tsx:19:24) 在 ErrorBoundary (webpack-internal:///./node_modules/@next/react-dev-overlay/lib/internal/ErrorBoundary.js:23:47) 在 ReactDevOverlay (webpack-internal:///./node_modules/@next/react-dev-overlay/lib/internal/ReactDevOverlay.js:73:23) 在容器(webpack-internal:///./node_modules/next/dist/client/index.js:150:5) 在 AppContainer (webpack-internal:///./node_modules/next/dist/client/index.js:639:24) 在 Root (webpack-internal:///./node_modules/next/dist/client/index.js:764:24) 强文本
import { Box,Button,Flex,Link } from "@chakra-ui/react";
import React from "react";
import NextLink from "next/link";
import { uselogoutMutation,useMeQuery } from "../generated/graphql";
import { isServer } from "../util/isServer";
interface NaveBarProps {}
export const NavBar: React.FC<NaveBarProps> = ({}) => {
const [{ fetching: logoutFatching },logout] = uselogoutMutation();
const [{ data,fetching }] = useMeQuery({
pause: isServer(),});
let body = null;
console.log('DATA',data);
if (fetching) {
} else if (!data?.me) {
body = (
<>
<NextLink href="/login">
<Link color="white" mr={2}>
login
</Link>
</NextLink>
<NextLink href="/registration">
<Link color="white" mr={2}>
Register
</Link>
</NextLink>
</>
);
} else {
body = (
<>
<Flex>
<Box mr={3}>{data.me.username} </Box>
<Button
color = 'yellowgreen'
onClick={() => {
logout();
}}
isLoading={logoutFatching}
variant="link"
>
logout
</Button>
</Flex>
</>
);
}
return (
<>
<Flex bg="tomato" p={4}>
<Box ml={"auto"}>{body}</Box>
</Flex>
</>
);
};
解决方法
在 Ben Awad 的 14 小时 youtube 教程之后遇到了同样的问题。问题是 MeQuery 为 SSR 暂停,因此在客户端接收用户数据后呈现它之前,userInfoBody 设置不正确。简单的解决方法是对 userInfoBody 设置使用相同的 isServer 检查:
let userInfoBody = null;
if (isServer() || fetching) {
} ...
,
对于任何试图解决这个问题的人来说,它来自 Ben Awad 在 youtube 上的 14 小时教程。我已经完成了这个项目,我自己也遇到了这个错误,我已经将它隔离到某个地方:从涉及 NextLink 组件的服务器和客户端渲染时存在一些不一致。
注释掉这两个链接将修复错误。这可能不是您正在寻找的答案,但其他人可能会在这里插话。我也会在接下来的几天里给它一些时间!
祝你好运!