【Next】初识 Next

概述

在Reactr中创建SSR应用,需要调用 ReactDOM.hydrateRoot 函数,而不是 ReactDOM.createRoot。

  • createRoot:创建一个Root,接着调用其 render 函数将 App 直接加载到页面上
  • hydrateRoot:创建水合 Root, 是在激活的模式下渲染 App

服务端可用 ReactDOM.renderToString 来进行渲染。

目录结构

  • app 应用路由
  • pages 页面路由
  • public 要提供的静态资源
  • src 可选的应用源文件夹

App Router 的优先级高于 Pages Router。

src 是一个可选项,如果根目录中存在 app 或 pages,则 src/app 或 src/pages 将被忽略。如果你使用 TypeScript 路径进行导入(例如 @/*),则应更新 tsconfig.json 中的 paths 对象以包含 src/。

创建项目时 选择 直接 @ 路径,会在 tsconfig.json 中添加配置:

    "paths": {
      "@/*": ["./*"]
    }

导入自定义组件 components 必须遵循格式 :my-button -> MyButton 。

环境变量

Next.js 内置支持将环境变量从 .env* 文件加载到 process.env。

判断环境:

/app/page.tsx

'use client'

export default function Home() {

    if (typeof window === 'object') {
        // 在客户端渲染时执行
        console.log('This is client-side rendering');
    } else {
        // 在服务器端渲染时执行
        console.log('This is server-side rendering');
    }
    return (
        <div>
            <h1>Welcome to my website! 你好</h1>
        </div>
    );
}

必须加 ‘use client’,否则默认只在服务端渲染,页面再被客户端请求。

在use client下可以使用客户端钩子。最好的做法是哪个组件需要有客户端和服务端的交互,就将需要交互的那部分组件变为 ‘use client’ 。
具体使用可以参考:use client 和 use server 的区别

使用 NEXT_PUBLIC_API_URL=http://localhost:8080 这里的 以 NEXT_PUBLIC开头的环境变量默认会加入到客户端渲染,否则获取不到该环境变量:

在这里插入图片描述

NEXT_PUBLIC_API_URL=$HOSTNAME:$PORT 写成这样同理(相当于深拷贝,只是拷贝了值)

console.log(process.env.PORT)  // undefined
console.log(process.env.NEXT_PUBLIC_API_URL) // http://localhost:8080

process.env 不支持解构,两端都可以直接使用

非 NEXT_PUBLIC_ 环境变量仅在 Node.js 环境中可用,加上后可以在客户端或者服务端使用。

  • .env 所有环境下生效的默认设置
  • .env.development:执行next dev时加载并生效
  • .env.production:执行next start时加载并生效
  • .env.local:优先级比上面都高,用于覆盖上面的默认值,一般忽略放入 git,常用于存放敏感信息
  • 使用 next.config.mjs 中的 env 配置,优先级最高

其他 next.config.mjs 配置

basePath : 项目路径前缀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秀秀_heo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值