getStaticProps 主要用于构建时落地一些静态数据,但不同于 getServerSideProps,getStaticProps 默认情况下只会在构建时执行一次,之后的每次请求都会使用构建时的数据...使用 先看下 getStaticProps 如何使用,其实和 getServerSideProps 用法差不多: export default function GetStaticProps({ content...content } }; }; 只需要在 page 中导出 getStaticProps 函数,然后在函数中返回 props 即可。...不为 false 时 当使用了 revalidate 时 上面给出的例子是 getStaticProps 最简单的一个例子,只有在执行 next build 时才会调用 getStaticProps,...而 fallback 为 true 时会有一些不同,当访问不存在的页面时不会返回 404,而是会返回动态路由页面,并且使用页面参数去请求 getStaticProps 数据,然后生成静态页面和 JSON
一.Next.js 简介 The React Framework for Production 面向生产使用的 React 框架(废话)。...):锦上添花 集成 Serverless 函数:锦上添花 自动 polyfill、自定义head标签:友情赠送 此外,还提供了一些通用场景支持: 开箱即用(0 配置) TypeScript CSS module...按参数获取数据,并渲染页面: // pages/posts/[id].js export async function getStaticProps({ params }) { // 根据路由参数获取相应数据...1]/[路由参数2].js),接着getStaticPaths填充路由参数,getStaticProps({ params })根据参数请求不同数据,最后数据进入页面组件开始预渲染: ?...围绕预渲染如何获取数据的问题,Next.js 探索出了别致的路由支持和精巧的 SSG、SSR 支持。
在本文中,我将深入探讨这些核心特性的工作原理、应用场景及最佳实践,并通过代码示例演示如何在实际项目中高效利用Next.js实现高性能、高SEO友好的应用。...一、静态生成(SG)静态生成是Next.js提供的一种预渲染技术,它在构建时生成页面的HTML文件,这些文件在部署后可以直接由CDN分发给用户,无需服务器参与实时渲染。...使用getStaticProps获取静态数据在页面组件中使用getStaticProps生命周期方法获取静态数据。该方法在构建时运行,返回的数据将用于生成静态HTML文件。...使用getStaticPaths预定义动态路由对于动态路由(如pages/posts/[slug].js),需要使用getStaticPaths指定预渲染的路径列表。...使用getServerSideProps获取服务器端数据与getStaticProps类似,getServerSideProps也在服务器端运行,但每次用户请求时都会触发。适合需要实时数据的场景。
你不用关心head里面资源如何配置加载 可以像SPA应用一样,使用css-in-js,css module,less,sass等样式import方式。...`和`getStaticPaths`(SSG)构建时请求数据 所谓的SSG也就是静态站点生成,类似像hexo或者gatsbyjs都是在build阶段将页面构建成静态的html文件,这样线上直接访问HTML...Next 在9.3中更近了一步,引入了getStaticProps和getStaticPaths方法来让开发者指定哪些页面可以做SSG优化。...使用getStaticProps方法在build阶段返回页面所需的数据。 如果是动态路由的页面,使用getStaticPaths方法来返回所有的路由参数,以及是否需要回落机制。...,需要注意的是: getStaticPaths方法返回的fallback很有用:如果fallback是false,访问该方法没有返回的路由会404 但是如果不想或者不方便在build阶段拿到路由参数,可以设置
export async function getStaticProps() { return { props: undefined, } } 这个函数返回的对象的 props 属性,就是导出的函数式组件用到的参数...所以,只需要在 getStaticProps 函数中得到数据并返回即可。...函数,getStaticProps 也多了一个 parms 参数。...[id].js 多出的 getStaticPaths 函数正是用来返回 id 所有可能的匹配值的。..._id } })) }; 然后修改 getStaticPaths 函数: export async function getStaticPaths() { return {
接下来我们在 Pages 目录下创建这个特殊的文件 pages/articles/[id].js, Next.js 使用id作为路由的参数,生成 /articles/article-01 的页面路由。...pages/articles/[id].js 这个文件里实现Next.js 特有的 getStaticPaths() 函数功能(Static Generation),在项目构建时生成指定的路由路径,比如这个案例将...({ params }),在项目构建时调用这个函数(Static Generation),通过 id 参数调用 lib/posts-md.js 文件中 getFileData() 定义的方法,将 MD...1 : -1)); } 2、接下来我们新建一个博客列表页 pages/articles/index.js,创建一个异步方法 getStaticProps(),在项目构件时,调用刚才我们编写的方法 getAllFiles...() 这个方法,并且需要此页面改成 pages/articles/[index].js(注:index可以换成你想要的参数,但是需要和getStaticPaths 方法中的参数对应),在页面构建时生成对应的页面路由
name=' + name)) as any; return ( //... ); } pages 在pages路由中,我们需要实现getStaticPaths和getStaticProps...这两个方法 getStaticPaths:返回静态页面所有路由变量值的数组,假如使用的是[name]这个变量,就需要返回name的所有情况。...getStaticProps:返回静态页面匹配成功后,需要加载的数据。...export const dynamicParams = true; pages pages路由实现ISR需要在getStaticProps方法中添加参数revalidate,来指定周期时间重新生成静态页面...兜底策略 getStaticPaths 方法中还有一个参数 fallback 用于控制未生成静态页面的渲染方式。设置此变量后,我们可以指定路由未生成时的页面渲染内容,避免出现报错。
你不用关心head里面资源如何配置加载 可以像SPA应用一样,使用css-in-js,css module,less,sass等样式import方式。...和getStaticPaths(SSG)构建时请求数据 所谓的SSG也就是静态站点生成,类似像hexo或者gatsbyjs都是在build阶段将页面构建成静态的html文件,这样线上直接访问HTML文件...Next 在9.3中更近了一步,引入了getStaticProps和getStaticPaths方法来让开发者指定哪些页面可以做SSG优化。...使用getStaticProps方法在build阶段返回页面所需的数据。 如果是动态路由的页面,使用getStaticPaths方法来返回所有的路由参数,以及是否需要回落机制。...,需要注意的是: getStaticPaths方法返回的fallback很有用:如果fallback是false,访问该方法没有返回的路由会404 但是如果不想或者不方便在build阶段拿到路由参数
接下来我们在 Pages 目录下创建这个特殊的文件 pages/articles/[id].js, Next.js 使用id作为路由的参数,生成 /articles/article-01 的页面路由。...pages/articles/[id].js 这个文件里实现Next.js 特有的 getStaticPaths() 函数功能(Static Generation),在项目构建时生成指定的路由路径,比如这个案例将...({ params }),在项目构建时调用这个函数(Static Generation),通过 id 参数调用 lib/posts-md.js 文件中 getFileData() 定义的方法,将 MD...1 : -1)); } 2、接下来我们新建一个博客列表页 pages/articles/index.js,创建一个异步方法 getStaticProps(),在项目构件时,调用刚才我们编写的方法 getAllFiles...].js(注:index可以换成你想要的参数,但是需要和getStaticPaths 方法中的参数对应),在页面构建时生成对应的页面路由,你可以参照第一部分基于MD文档生成动态路由这部分内容,具体的逻辑你可以考虑下怎么实现
SSR (Server-side Rendering)在 Next.js 中使用 getServerSideProps 来实现服务端渲染,该动作在用户发起页面请求时执行,示例代码如下:function...getStaticProps 来实现静态页面生成,该动作在 next build 时执行,示例代码如下:// posts will be populated at build time by getStaticProps...ISR (Incremental Static Regeneration)在 Next.js 中使用增量静态生成,只需在 getStaticProps 中添加属性 revalidate,该动作在用户发起页面请求时执行...使用 ISR,就可以在运行时实现静态页面生成,而无需重新构建整个网站。...Dynamic Routing在 Next.js 中配合使用 getStaticPaths + getStaticProps 即可实现动态路由的预渲染,该动作在 next build 时执行,示例代码:
学习如何轻松构建可伸缩的 React 应用程序:服务端渲染 SSR # 什么是 SSR SSR(Server-Side Rendering,服务器端渲染)是指将 React、Vue、Angular 等客户端渲染的应用在服务器端执行一次...# 为什么使用 SSR 并不是每个应用程序都需要使用服务器端渲染。...为了生成页面,我们需要导出页面组件或 getStaticProps 函数(需要的时候,还可以导出 getStaticPaths 函数)。...我们需要从 users/[id].js 文件中导出一个名为 getStaticPaths 的异步函数 function User({ user }) { return ( ...,可以在每个请求时生成 HTML。
丰富的社区资源:由于使用时间较长,有大量的教程、示例和第三方库支持。 稳定性高:经过多年的使用和优化,bug 较少,表现稳定。...数据获取方法较为固定:主要依赖 getServerSideProps 和 getStaticProps,灵活性较低。...getStaticProps 和 getStaticPaths 来实现静态生成。...同时,我们使用 notFound 函数来处理文章不存在的情况,这是 App Router 提供的内置错误处理机制之一。 如何选择?...个人经验分享 作为一个初使用 Next.js 的开发者,我最初对 App Router 也感到困惑。但是,当我开始处理复杂的布局和需要优化性能的场景时,App Router 的优势就显现出来了。
也就是说,时至今日,React Components 仍等价于 Class Components,早期的函数式组件只能叫 Stateless Components,获得 Hooks 加持之后的函数式组件虽然摆脱了...Module 只组织代码,将变量、函数等语法元素圈在一起,而不像 Class 会强加实例状态、成员方法等额外概念 例如,Next.js 的 Page 定义就只是个文件模块: // pages/about.js...在内的不同渲染模式混用: ISR(Incremental Static Regeneration):增量静态再生成,运行时定期重新生成静态 HTML SSG 降级 SSR:未命中预先生成的静态 HTML 时,...立即进行 SSR SSR 带静态缓存:SSR 完成之后,将结果缓存起来,下次命中静态缓存直接返回(相当于 SSG) SSG 结合 CSR:编译时生成静态部分(页面外框),CSR 填充动态部分(页面内容)...me.png" alt="Picture of the author" layout="fill" /> 第三阶段与第二阶段的区别在于,开发者不必关心哪个组件能够提供懒加载功能(选择最佳实践),直接使用组件库中最普通的
,静态站点生成方案,更适合 CDN、缓存、内容数据无变化的页面,比如:宣传页、博客文章、帮助文档、新闻页面、电商产品列表等众多应用场景; Next.js 中的 getStaticProps 、 getStaticPaths...就是静态站点生成;是在构建时生成 HTML 的方法,以后的每个请求都共用构建时生成好的 HTML; Next.js 建议大多数页面使用静态生成,因为页面都是事先生成好的,一次构建,反复使用,访问速度快...getStaticProps() 方法是个异步方法,在 Node 环境下执行(构建时执行),因此可以进行文件读写,数据库链接,网络通信等一些列操作 对于这个方法的使用,先看 demo: import...getStaticPaths() 这个方法也是静态生成。...与 getStaticProps 共同使用,会根据不同的请求参数生成不同的静态页面,它的使用方式比较特殊,代码文件要放在一个目录中,同时代码文件的文件名,要使用 可选项 文件名的形式,如\pages\
{js,ts,jsx,tsx}']打包时只会提取使用到的样式,让应用 css 最小化。...getStaticProps 在构建时请求数据。...export async function getStaticProps(context) { // fetch data return { props: { //data...}, } } 这样就需要在构建时获取全部文章列表,而博客详情页是一个动态路由,就需要 getStaticPaths 这个 API getStaticPaths 构建时获取动态路由的数据 export...它使用 Prisma Schema,以声明的方式定义应用程序模型。然后使用 Prisma Migrate 命令, Prisma Schema 会生成 SQL 迁移并根据数据库执行它们。
Image 组件的好处就是可以提高网页加载图片的性能,可以自动按需加载,当图片进入视图时再加载图片。...: { allPostsData } } } 将 getStaticProps 这个函数 export 出来,里面则为 build time 时获取数据的逻辑。...在页面组件文件里,可以通过前面说到的 getStaticProps 和 getServerSideProps 获取 params: export async function getStaticProps...注意:不能在 getStaticProps 和 getStaticPaths 里添加 fetch 数据,因为他们只在 server side 运行,不会在 client side 运行,应该使用 helper...其实就是 export 一个对应名字的函数,在里面提前获取数据就好了) 样式方面和 create-react-app 差不多
{js,ts,jsx,tsx}']打包时只会提取使用到的样式,让应用css最小化。 4、之前写了《使用 CSS variables 和Tailwind css实现主题换肤》也运用到了我的博客中。...getStaticProps 在构建时请求数据。...export async function getStaticProps(context) { // fetch data return { props: { //data...}, } } 这样就需要在构建时获取全部文章列表,而博客详情页是一个动态路由,就需要 getStaticPaths 这个API getStaticPaths 构建时获取动态路由的数据 export...它使用 Prisma Schema,以声明的方式定义应用程序模型。然后使用 Prisma Migrate 命令, Prisma Schema 会生成 SQL 迁移并根据数据库执行它们。
什么是路由 简单的说,路由就是URL到函数的映射。路由的本质是监听URL的变化,然后匹配路由规则,显示相应的页面。 Router和Route 在React-Router中,路由使用基本如下所示。...服务端路由 服务器端会接受到客户端的http请求,根据请求中的URL,找到响应的映射函数,然后执行该函数,向返回的值发送给客户端。...主要使用history.pushState和history.replaceState改变URL。...比如,当我们登陆github时,url是https://www.github.com/Bzsheng。...人家肯定不可能为每个用户创建一条路由,这时候就是创建一条动态的路由,形如/:id来实现的,当我登陆的时候,将参数Bzsheng传递过去,从而获取到页面。
需求是需要使用js函数执行给某个div标签赋值,但是当传入id和title时就不能进入js中,尝试很久才明白title属于字符串,需要使用引号,但是不确定怎么加,多番调试终于通过了,如下: οnclick
本文主要是讲讲如何使用 Next.js 框架实现服务端渲染,将有效提升网页的 SEO 和首屏渲染速度,说不定哪天就用上了,是吧!.../blog/first-post 4.3 动态参数路由 常见于比如博客的文章详情页面,文章的 id 是动态变化的,Next.js 中可以使用中括号解析到对应的命名参数 文件路径对应路由pages/blog...6.3 获取数据 (1)静态生成时获取数据 在服务端构建生成静态页面之前,有时候需要获取一些数据,可以借助 getStaticProps 方法。...async function getStaticProps() { // 获取数据,例如从数据库、API、文件等 const data = ... // 返回的参数将会按照 key 值赋值到...,地址:https://swr.vercel.app/zh-CN/docs/getting-started 七、动态路由 上面讲到了预渲染,如果是动态路由的预渲染该如何处理?