标签: server-side-rendering

NuxtJS 初始加载后 SSR 如何工作?

在纯 VueJS 应用程序中,我们有一个<div id="app"></div>容器,VueJS 放置所有需要渲染的内容。

因此,如果我们在浏览器中打开源代码,我们将看不到任何渲染的内容。

因此,如果我们使用 SSR 的 Nuxt 功能,则在第一次初始加载时,所有组件都会呈现在服务器上,我们会看到一些 HTML 内容。

但是,当我们浏览该网站时,当它在“水疗模式”(使用<nuxt-link>)下工作时,会发生什么。当我单击链接时,该网站未完全重新加载。我在 chrome 开发工具中看不到任何请求,除了 XHR,也没有其他。即使我们从后端获得了完全渲染的内容,它也会通过 javascript 插入,就像在这种<div id="app"></div>"情况下一样,因为我们不会重新加载页面。

但我可以在源代码中看到一切都符合 SEO 需要:导航到其他一些路线后,所有 html 都出现在源代码中。但这是怎么发生的呢?

javascript server-side-rendering nuxt.js

2
推荐指数
1
解决办法
1535
查看次数

Material UI Select 组件上的“keepMounted”属性未将菜单项安装到 DOM

我试图确保我的菜单项安装在 DOM 中以用于 SEO 目的。我正在使用 MUI Select 组件作为下拉导航,并传入keepMountedprops,这些 props 最终通过 传播到 Popper 组件上MenuProps

我可以看到菜单项 HTML (ul > li) 安装在我的检查器中,但当我检查源或 CURL 时它们不存在。

const TopicSelect = ({
  classes,
  width,
  selectClassName,
  topicData,
  selectedValue,
  onChange,
}) => {
  const isMobile = isWidthDown('xs', width)

  return (
    <FormControl data-testid="TopicSelect-formControl" variant="filled">
      <InputLabel className={classes.label} htmlFor="topic-select-input">
        Filter by topic
      </InputLabel>
      <Select
        data-testid="TopicSelect-select"
        className={classnames(classes.select, selectClassName)}
        onChange={onChange}
        value={selectedValue}
        autoWidth
        native={isWidthDown('xs', width) ? true : false}
        input={
          <FilledInput
            name="topic"
            id="topic-select-input"
            className={classes.filledInput}
            disableUnderline
          />
        }
        MenuProps={{
          style: {
            zIndex: …
Run Code Online (Sandbox Code Playgroud)

seo dom reactjs material-ui server-side-rendering

2
推荐指数
1
解决办法
1万
查看次数

使用 NextJS SSR 时,为什么我在浏览器中看不到网络选项卡请求?

我正在开发一个使用 SSR 构建的 React 应用程序,用于 SEO 目的。NextJS 的 SSR 如何工作?这些请求必须是从某个地方发出的;如果不是浏览器,那么在哪里?谢谢你!

reactjs server-side-rendering next.js

2
推荐指数
1
解决办法
6396
查看次数

如何验证服务器端的浏览器是否没有窗口引用?

我正在开发将 SSR 与 Angular Universal 集成的 Angular 应用程序。在这个项目中,我们使用一些步进器的插件(bs-stepper)。问题是这个插件有一个多窗口引用,如下所示:

var matches = window.Element.prototype.matches;
Run Code Online (Sandbox Code Playgroud)

我需要一种方法来验证它是否是浏览器,尝试了“检测”和“导航器”等多个选项。

javascript server-side-rendering angular-universal angular

2
推荐指数
1
解决办法
4083
查看次数

如何在服务器端渲染 Svelte?

我可以使用 Svelte 生成“初始”HTML 文件吗?

我正在使用 Django、Webpack 和 Tailwindcss。我想在我的前端中使用 Svelte,但我不想放弃仅使用服务器端渲染(Django 模板)带来的速度。如果我最初展示的是一个引导 HTML 页面,它引入了 bundle.js,并且 Svelte 在客户端构建了 DOM,那么浏览器仅在加载 JS 文件后才开始下载图像。

与最初呈现的 HTML 已包含图像链接相比,浏览器开始与 JS 一起下载它们,从而加快感知页面加载速度。

我不想使用 Sapper 作为我的应用程序服务器,我想继续使用 Django。

server-side-rendering svelte svelte-component svelte-3

2
推荐指数
1
解决办法
1万
查看次数

在 _app 中模拟 Next.js getInitialProps

我正在尝试找到一种方法来模拟Next.js's getInitialProps

我目前正在使用 cypress 运行 E2E 测试,但无法找到一种方法来模拟服务器端获取,而不需要启动模拟服务器来进行获取。我很好奇是否有人找到了更好的方法?

谢谢你!

server-side-rendering next.js cypress

2
推荐指数
1
解决办法
441
查看次数

Gatsby:使用localStorage存储数据

我有一个 Gatsby 网站,并且正在实施 GDPR 同意横幅。我想将状态存储在本地存储中,其中包含与用户是否接受 GDPR 条款相关的“true”或“false”字符串。

例如,用户第一次访问该网站。在本地存储中,有一个“GDPR_Accepted”键设置为“false”。如果用户不接受主页上的 GDPR 条款,则横幅将继续显示在用户访问的每个页面上。当用户单击接受时,GDPR_Accepted 值设置为“true”,并且我的 React 组件中的三元运算符应用隐藏横幅的 CSS 类。

因为我使用的是本地存储,所以即使用户离开页面并稍后返回(假设他们没有清除浏览历史记录),“true”值也应该持续存在。问题出在盖茨比身上。Gatsby 使用服务器端渲染,当用户接受 GDPR 条款并离开网站并返回时,GDPR 值将重置为“false”。当设置为“true”时,Gatsby 无法保留之前的本地存储数据。

如何在 Gatsby 项目中将数据保存在本地存储中?仅使用 React 状态来存储用户是否接受 GDPR 条款是否更有意义?

cookies local-storage reactjs server-side-rendering gatsby

2
推荐指数
1
解决办法
5444
查看次数

在 nextJS 应用程序中,使用 SWR 通过 SSR 刷新预取数据是一种好的做法吗?

我们假设有以下页面:

export default ({ SSRtasks }) => {
  const [ tasks, setTasks ] = useState(SSRtasks)
  const { data: freshTasks, mutate } = useSwr('/api/tasks')
  useEffect(() => freshTasks && setTasks(freshTasks), [ freshTasks ])

  return (
   <ul>{tasks.map(task => <li>{task}</li>)}</ul>
  )
}

export const getServerSideProps = async ({ req, res }) => {
  const SSRtasks = Task.find({ owner: id })
  return { props: { SSRtasks } }
}
Run Code Online (Sandbox Code Playgroud)

知道任务在不断更新,就性能而言,这是正确的吗?
我找不到任何关于此的文档。(或者至少,理解)

server-side-rendering next.js swr

2
推荐指数
1
解决办法
4795
查看次数

Next.js - 页脚/页眉仅通过 API 加载一次,服务器端

我正在构建一个 Next.js 无头应用程序,通过对 Umbraco 后端的 API 调用来获取数据。我使用getServerSideProps加载每个页面的数据,然后将其作为“数据”传递到功能组件和页面中。

我遇到的问题是,我对网站的页眉/页脚部分有单独的端点,并且在所有页面之间共享。因此,每页调用 3 次(页眉、数据、页脚)是一种耻辱,而且是不好的做法。

为了获取页眉/页脚一次,然后将其保留在多个页面中,同时保持 SSR,可以做什么?(重要的)。我尝试过使用cookie,但它们无法保存这么多数据。下面是一些代码:

页面获取数据:

export async function getServerSideProps({ locale }) {
    const footer = await Fetcher(footerEndPoint, locale);

    return {
        props: {
            locale: locale,
            footer: footer
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

布局

const Layout = (props) => {
    const { children, footer } = props;

    return (
        <>
            <Header />
            <main>
                {children}
            </main>
            <Footer footer={footer} />
        </>
    );
};

export default Layout;
Run Code Online (Sandbox Code Playgroud)

reactjs server-side-rendering next.js

2
推荐指数
1
解决办法
8709
查看次数

如何在 Vue 3 SSR 应用程序的路由器中使用 vuex 存储?

我有一个包含 SSR、Vue-Cli、Vuex 和 Typescript 的 Vue3 项目。

在路由器页面中,我需要将数据提交到 Vuex Store。在 .vue 文件中,我只需使用在 vuex.d.ts 中输入的 this.$store ,例如:

this.$store.commit("setFoo", "Bar")
Run Code Online (Sandbox Code Playgroud)

但是我该如何从没有 this 或 vue 实例的 ts 文件 (router/index.ts) 中做到这一点。

我尝试导入商店索引文件并提交:

import store from "@/store/index"

store.commit("setFoo", "Bar")
Run Code Online (Sandbox Code Playgroud)

但我收到一个错误

类型 '() => Store<{ foo: string; 上不存在属性 'commit' }>'.ts(2339)

商店文件(因为我正在运行 SSR,所以商店不能是单例):

import Vuex from "vuex"

export default function () {
  return new Vuex.Store({
    state: () => ({
      foo: "foo",
    }),
    mutations: {
      setFoo(state, payload) {
        state.foo = payload
      },
    },
  })
}
Run Code Online (Sandbox Code Playgroud)

更新了 vuex 4 …

typescript vue.js server-side-rendering vuex vuejs3

2
推荐指数
1
解决办法
5208
查看次数