NextJS有单页应用模式吗?
Does NextJS have single page application mode?
我有一个使用 React 和 NextJS 的项目。目前,我有一个自定义 _app.js 使页面成为 SSR。但现在我希望页面不在服务器端加载。有什么办法吗?
我们可以使用next.js动态导入(https://nextjs.org/docs/advanced-features/dynamic-import):
import dynamic from 'next/dynamic'
const DynamicComponentWithNoSSR = dynamic(() => import('../components/hello3'), { ssr: false })
你也可以这样写 HOC:
import React from 'react';
const isClient = () => typeof window !== 'undefined';
export const withClientRenderOnly = <P extends Record<string, unknown>>(
WrappedComponent: React.ComponentType<P>
) => {
const WrappedWithClientRenderOnly: React.FC<P> = props => {
if (!isClient()) return null;
return <WrappedComponent {...props} />;
};
return WrappedWithClientRenderOnly;
};
或创建简单的构图:
const ClientRenderOnly: React.FC = ({ children }) => {
const [isMounted, setMounted] = useState(false);
useEffect(() => setMounted(true), []);
if(!isMounted) return null;
return children;
};
const Page = () => <ClientRenderOnly>Page</ClientRenderOnly>
nextjs中有3种渲染Server side render,Server side generation和client side rendering。创建自定义 _app 不会使其成为 SSR。请查看那里的文件
所以你想用SSR构建SPA,对吧?
我很困惑,因为你说你现在不想 server-side 渲染。
如果你不想要 SSR,你为什么要使用 NextJs?,因为 NextJs 是为了 SSR
还有一点是自定义“_app.js”不会成为 SSR。以下是您可以使用自定义 APP
执行的功能
- 在页面更改之间保持布局
- 导航页面时保持状态
- 使用 componentDidCatch 自定义错误处理
- 将额外数据注入页面
- 添加全局CSS
我有一个使用 React 和 NextJS 的项目。目前,我有一个自定义 _app.js 使页面成为 SSR。但现在我希望页面不在服务器端加载。有什么办法吗?
我们可以使用next.js动态导入(https://nextjs.org/docs/advanced-features/dynamic-import):
import dynamic from 'next/dynamic'
const DynamicComponentWithNoSSR = dynamic(() => import('../components/hello3'), { ssr: false })
你也可以这样写 HOC:
import React from 'react';
const isClient = () => typeof window !== 'undefined';
export const withClientRenderOnly = <P extends Record<string, unknown>>(
WrappedComponent: React.ComponentType<P>
) => {
const WrappedWithClientRenderOnly: React.FC<P> = props => {
if (!isClient()) return null;
return <WrappedComponent {...props} />;
};
return WrappedWithClientRenderOnly;
};
或创建简单的构图:
const ClientRenderOnly: React.FC = ({ children }) => {
const [isMounted, setMounted] = useState(false);
useEffect(() => setMounted(true), []);
if(!isMounted) return null;
return children;
};
const Page = () => <ClientRenderOnly>Page</ClientRenderOnly>
nextjs中有3种渲染Server side render,Server side generation和client side rendering。创建自定义 _app 不会使其成为 SSR。请查看那里的文件
所以你想用SSR构建SPA,对吧? 我很困惑,因为你说你现在不想 server-side 渲染。 如果你不想要 SSR,你为什么要使用 NextJs?,因为 NextJs 是为了 SSR
还有一点是自定义“_app.js”不会成为 SSR。以下是您可以使用自定义 APP
执行的功能- 在页面更改之间保持布局
- 导航页面时保持状态
- 使用 componentDidCatch 自定义错误处理
- 将额外数据注入页面
- 添加全局CSS