typescript 如何在next js的服务器端渲染中使用钩子?

tf7tbtn2  于 2023-03-04  发布在  TypeScript
关注(0)|答案(1)|浏览(182)

但不能在服务器端呈现页面中使用钩子

    • 示例:**
export const getServerSideProps: GetServerSideProps = async (ctx:any) => {
   
    const { data } = useLocalStorage()

    return {
        props: { data : data}
    }
}
tzdcorbm

tzdcorbm1#

实际上你可以在服务器端使用钩子。
一般来说,钩子只是普通的功能,问题是,一旦你试图访问只存在于浏览器中的东西,例如windowlocalStorage,等等,服务器就会辞职,因为它知道这是一个客户端专用的任务。

// src/hooks/useOnServer.ts
import { useIsSSR } from "@react-aria/ssr";

/**
 * useIsSSR is another hook that returns true if on server-side.
 * in the browser it logs 'Client', on the server 'Server'
 * (btw the package also offers a SSRProvider to wrap your `<App />` with.
 */
export default function useOnServer() {
  const isServer = useIsSSR();

  console.log(isServer ? "Server" : "Client");
}

这里如何使用它:

// src/pages/home.tsx
import useOnServer from "src/hooks/useOnServer";

export default function Home() {
  // boom!
  useOnServer();

  return <p>hurray! it worked!</p>
}

这是同构编码的全部功能。你可以。

  • 写一个验证器来只实现一次表单验证,这是一个典型的冗余服务器和客户端挑战,非常容易出错,因为每次表单需要调整时,后端和前端都需要同步。然后,您需要:2个脚本、2个开发文件、2个测试文件、手动同步...

这就像一个滴答作响的定时炸弹💣MeteorJS可能是第一个提出同构框架的(或者说它是我几年前使用的第一个)
显然,它需要一点🧠并且有它的学习曲线,但是好处比补偿更多。享受编码你的第一个同构钩子并且让我们知道如果你决定开源它!🍀

相关问题