我只是想知道是否有任何方法可以将此代码从客户端Rending转换为SSR

I just want to know if exist any way to transform this code from Client Side Rending to SSR

提问人:Luis David Onate 提问时间:6/13/2023 更新时间:6/13/2023 访问量:9

问:

'use client'
import React, { useState, useEffect } from 'react'
import DesktopProduct from './DesktopProduct'
import MobileProduct from './MobileProduct'
import { useGetProductQuery } from '@/redux/services/productsFetch'

const ProductContainer = ({ id }: { id: string }) => {
  const [mobile, setMobile] = useState(false)
  const [desktop, setDesktop] = useState(false)

  const { data } = useGetProductQuery(id)

  useEffect(() => {
    if (window.innerWidth <= 720) {
      setMobile(true)
    } else {
      setDesktop(true)
    }
    addEventListener('resize', () => {
      if (window.innerWidth <= 720) {
        setMobile(true)
        setDesktop(false)
      } else {
        setDesktop(true)
        setMobile(false)
      }
    })
  }, [])
  return (
    <div>
      {mobile && data && <MobileProduct data={data} />}
      {desktop && data && <DesktopProduct data={data} />}
    </div>
  )
}

该应用程序由两个完全不同的页面组成,适用于手机和计算机。内部组件不能处理可在客户端上处理的任何类型的数据。因此,就性能而言,使用 SSR 会更好。我尝试了不同的方法,其中一种是使用页面的CSS并且有效,但我想知道除了使用CSS之外,是否有任何方法可以修复它

下一页 .js 服务器端渲染 客户端

评论

0赞 ViaTech 6/13/2023
我假设您的问题包含在 中定义的逻辑中,并且当它在客户端上运行时,我们可以看到吗?但是,是的,您应该能够使用 ajax 加载您需要的任何内容(但这不是 SSR,因为它是 JS),尽管它甚至可能需要几秒钟来处理,但它不会锁定页面渲染,您可以在将数据添加到页面上的正确位置之前添加微调器或用于视觉交互的东西setMobile()setDesktop()
0赞 KeitelDOG 6/13/2023
您无法将 React 组件代码从客户端渲染转换为 SSR。你所能做的就是让组件做一些事情,如果它在服务器上,如果它在客户端上,则做一些其他事情。为了让它在服务器端呈现,你需要一些特殊的配置来在服务器端(NodeJS)捕获请求,并设置一个虚拟DOM在Node上以HMTL呈现它,然后将其转发到客户端。如果从头开始,则非常复杂,但是有一些预设置可以提供帮助,例如Frameworks NextJS,Gatsby或Razzle。您可以进行手动设置进行学习,但这可能会打扰您。
0赞 KeitelDOG 6/13/2023
CSR:发送非常基本的 HTML 骨架代码 + 完整的 React 应用程序和组件代码,以便浏览器可以创建完整的 HTML 代码。SSR:使用虚拟 DOM 在带有 NodeJS 的服务器中渲染组件,并发送完整的 HTML 代码 + 客户端 React 应用程序组件代码,这些代码将添加或更改必要的 HTML 代码。
0赞 KeitelDOG 6/13/2023
看到这个来获取和了解最小的代码(正如他们在其中提到的 NOT PRODUCTION READY):digitalocean.com/community/tutorials/......

答: 暂无答案