javascript - 有什么办法可以抑制 React.FC 中的水化警告吗?

标签 javascript reactjs typescript

有什么方法可以抑制 React.FC 中的水化警告吗? 我有一个警告 Did not expect server HTML to contain a <div> in <div>因为pause: isServer()东西,但我需要它来停止对服务器的不断请求。我能以某种方式替换这个东西还是只使用 supressHydrationWarning在这样的组件中?

export const NavBar: React.FC<NavBarProps> = ({}) => {  
  const [{ fetching: logoutFetching }, logout] = useLogoutMutation();
  const [{ data, fetching }] = useMeQuery({pause: isServer()}); 
  console.log(data);
  const router = useRouter();
  ...
};

是服务器:

export const isServer = () => typeof window === 'undefined';

NavBar 在布局中:

import { Wrapper, WrapperVariant } from "./Wrapper";

interface LayoutProps {
  variant?: WrapperVariant;
}

export const Layout: React.FC<LayoutProps> = ({ children, variant }) => {
  return (
    <>
      <NavBar />
      <Wrapper variant={variant}>{children}</Wrapper>
    </>
  );
};

然后Index页面被Layout包裹

const Index = () => {
  const [variables, setVariables] = useState({
    limit: 15,
    cursor: null as null | string,
  });
  
  const [{ data, error, fetching }] = usePostsQuery({
    variables,
  });
  
  if (!fetching && !data) {
    return <div>query failed: {error?.message}</div>;
  }
  return (
    <Layout>
        ...
    </Layout>
  )
}

export default withUrqlClient(createUrqlClient, { ssr: true })(Index);
...

...并在打开 ssr 的情况下导出。

我将 Next.JS 与 Chakra-UI 一起使用,所以我认为它会在此处呈现?

import NextDocument, { Html, Head, Main, NextScript } from "next/document";
import { ColorModeScript } from "@chakra-ui/react";

export default class Document extends NextDocument {
  render() {
    return (
      <Html>
        <Head />
        <body>
          {/* Make Color mode to persists when you refresh the page. */}
          <ColorModeScript />
          <Main />
          <NextScript />
        </body>
      </Html>
    );
  }
}

最佳答案

如果您使用的是 NextJS,最简单的解决方案是使用 next/dynamic。

import dynamic from 'next/dynamic'
const NavBar = dynamic(() => import("/path/of/NavBar"), { ssr: false }) //<- set SSr to false

关于javascript - 有什么办法可以抑制 React.FC 中的水化警告吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67256421/

相关文章:

javascript - 不可读的 .js 文件?如何转换回来?

reactjs - 如何从 React 组件的状态对象中删除属性

reactjs - 为什么在handleLogin方法中this.props未定义?

javascript - 我可以只用一个字符串访问某些嵌套对象中的值吗?

javascript - 如何将 ng-repeat 与过滤器和 $index 一起使用?

javascript - react : Returning SVG contents as variable?

reactjs - 使用 WebPack CommonsChunkPlugin 提取重复的 javascript 代码

angularjs - 获取错误 - 找不到名称 'angular'

typescript - 我如何编写一个返回与参数相同类型的 TypeScript 函数?

typescript 根据输入参数返回对象键