当前位置: 首页 > news >正文

1.NextJS基础

NextJS注意要点

  1. 文件用来定义路由,folder name becomes the route name
  2. 注意区分客户端渲染和服务器渲染
    • html渲染完成后给到客户端(此时网页内容已经全部提供),有利于crawler和优化seo
    • 逻辑更简单
    • request deduplication减少API请求
      可以对比如下两份代码
// 客户端渲染
import React, { useEffect, useState } from "react";function Home() {const [albums, setAlbums] = useState([]);useEffect(() => {const fetchAlbums = async () => {try {const response = await fetch("https://jsonplaceholder.typicode.com/albums");const data = await response.json();setAlbums(data);} catch (error) {console.error("Error fetching albums:", error);}};fetchAlbums();}, []);return (<div className="grid grid-cols-1 sm:grid-cols-3 lg:grid-cols-4 gap-6 p-6">{albums.map((album) => (<divkey={album.id}className="bg-white shadow-md rounded-lg p-4 transition transform hover:scale-105 hover:shadow-lg"><h3 className="text-lg font-bold mb-2">{album.title}</h3><p className="text-gray-600">Album ID: {album.id}</p></div>))}</div>);
}export default Home;
// 服务器渲染
async function Home() {const response = await fetch("https://jsonplaceholder.typicode.com/albums");if (!response.ok) throw new Error("Failed to fetch data");const albums = await response.json();return (<div className="grid grid-cols-2 md:grid-cols-3 gap-4">{albums.map((album) => (<divkey={album.id}className="bg-white shadow-md rounded-lg p-4 transition-transform duration-200"><h3 className="text-lg font-bold mb-2">{album.title}</h3><p className="text-gray-600">ID: {album.id}</p></div>))}</div>);
}export default Home;

关键名词解释:
SSG(Static Site Generation):
在构建时生成html页面,而不是用户请求的时候,用户从CDN请求页面,所以并不适用于页面需要频繁修改的场景。
ISR(Incremental Static Regeneration)
SSG的扩展,基于时间来更新网页,适用于频繁改动但又不需要实时更新的网页。
SSR (Server Side Rendering)
Html在请求时由服务器生成,适合内容实时更新的场景
PPR (Partial PreRendering)
nextjs会生成一个壳来承载动态组件(用suspense标签标识)

组件内部异步:

            <button onClick={signIn("github")}><span>Login</span></button>

signIn是auth.js的异步方式,在组件内部不能直接调用,会报错:“Expected onClick listener to be a function, instead got a value of object type.”
此时可以用form标签替代,button=>

            <formaction={async () => {"use server";await signIn("github");}}><button type="submit"><span>Login</span></button></form>

http://www.mrgr.cn/news/95800.html

相关文章:

  • WHAM 人体3d重建部署笔记 vitpose
  • Harbor镜像仓库迁移与高可用集群搭建HTTPS实现实战指南
  • C++11QT复习(二)
  • 数据结构之优先级队列
  • Atlas 800I A2 双机直连部署DeepSeek-R1-w8a8
  • Go常见问题与回答(下)
  • poetry安装与使用
  • 华为交换相关
  • vmwaretools解压失败|vmware tools distrib cannot mkdir read only file system|bug汇总
  • Linux 练习一 NFS和DNS
  • Floyd 算法--多源最短路
  • 利用dify打造命令行助手
  • Spring Boot整合Activiti工作流详解
  • 【Redis实战专题】「技术提升系列」​RedisJSON核心机制与实战应用解析(入门基础篇)
  • 调语音类大模型必备-音频录制小妙招-自制工具-借助浏览器录一段单声道16000采样率wav格式音频
  • 华为OD机试 - 核酸最快检测效率 - 动态规划、背包问题(Java 2024 E卷 200分)
  • 【学习记录】大模型微调之使用 LLaMA-Factory 微调 Qwen系列大模型,可以用自己的数据训练
  • How to share files with Linux mint 22 via samba in Windows
  • Sql Server 索引性能优化 分析以及分表
  • _DISPATCHER_HEADER结构中的WaitListHead和_KWAIT_BLOCK的关系