下一个js - 在某些页面上禁用服务器端呈现

问题描述 投票:2回答:2

是否可以使用Next js在某些页面上禁用ssr?例如,我有一个产品描述的页面,我使用ssr进行搜索引擎优化,但我也有一个页面,其中包含我可以过滤的项目或产品列表,对于该页面,我不想使用ssr因为这个页面每次动态生成,如何在此页面上禁用ssr?

reactjs serverside-rendering next.js ssr
2个回答
13
投票

延迟加载组件并禁用SSR。 https://github.com/zeit/next.js#with-no-ssr

import dynamic from 'next/dynamic'

const DynamicComponentWithNoSSR = dynamic(() => import('../components/List'), {
  ssr: false
})

export default () => (
  <div>
    <DynamicComponentWithNoSSR />
  </div>
)

2
投票

dynamic()函数也可以在没有动态导入的情况下使用:

import dynamic from 'next/dynamic'
import React from 'react'

const NoSsr = props => (
  <React.Fragment>{props.children}</React.Fragment>
)

export default dynamic(() => Promise.resolve(NoSsr), {
  ssr: false
})

此组件中包含的任何内容都不会在SSR源中可见。

Contact me at <NoSsr>[email protected]</NoSsr>

1
投票

您无法禁用SSR。 readmore..

如果您只想在客户端启动某些东西,可以使用componentDidMount lifeCycle函数。如果您想从服务器端启动,则可以使用getInitialProps功能。


0
投票

这是一个迟到的答案,但万一有人碰到这个:

export const isServer = () => typeof window === `undefined`;
const Page = () => isServer() ? null : (

  <> 
      <YourClientSideComponent />
  </>
);

这是在“页面”级别。 isServer()阻止在服务器端渲染任何东西。如果您愿意,也可以在组件级别上阻止ssr:

export const isServer = () => typeof window === `undefined`;
const Page = () =>(

  <> 
      { .!isServer() && <YourClientSideComponent /> }
  </>
);
© www.soinside.com 2019 - 2024. All rights reserved.