超超超认真的next.js学习笔记-获取数据

浏览器访问网站的流程:输入一个网址,浏览器获取一个HTML页面,但这会页面没有数据,使用fetch发请求获取数据并使用useState设置state,state发生变化,这是render函数再一次去渲染页面,因此这个流程中咱们有两个渲染周期。而我们使用next.js则是利用第一个渲染周期进行预渲染,可以减少首页白屏显示时间。那next.js是怎么渲染的呢?


在next.js中文网中我们知道Next.js 有两种预渲染形式:静态生成服务器端渲染

静态生成:如果一个页面使用了静态生成,在页面构建时将生成对应的HTML文件,意味着在生产环境中,运行‘next build’时将生成该页面对应的HTML文件,接着,对应的HTML文件将在每个页面发请求时被复用,也可以被CDN缓存。

tips:这里的页面构建分为两个阶段:

  1. 解析HTML并解析文档对象模型(DOM)
  2. 执行JavaScript脚本 

服务端渲染(SSR|动态渲染):如果一个页面使用了服务端渲染,则在每次页面请求时重新去生成HTML文件。 


想要在预渲染时获取数据,分为两种情况:

在静态生成预渲染阶段,我们的页面组件需要使用到外部数据【接收参数】,通常使用到Next.js提供的函数:getStaticProps ,而如果咱们的页面使用动态路由,也需要的这个函数:getStaticPaths 。这两个函数都需要从同一文件export并都是async异步函数,都在构建时被调用,并允许咱们在预渲染阶段将获取的数据作为props传递给页面。

在服务端渲染阶段,咱们如果在某个页面需要频繁去更新数据,可以使用getServerSideProps这个函数去获取数据并传递给页面。这个函数也是从同一页面文件export同时也是async异步函数,在每次页面发请求时被调用。


下面咱们来说说这三个函数:

  1. getStaticProps(静态生成):在构建时获取数据。
  2. getStaticPaths(静态生成):指定动态路由以根据数据预渲染页面。
  3. getServerSideProps(服务器端渲染):获取每个请求的数据。

此外,我们将讨论如何在客户端获取数据:


getStaticProps(静态生成):在构建时获取数据 

如果从页面export名为 getStaticProps 的异步函数,Next.js 将在构建时使用 getStaticProps 返回的props预渲染此页面。

export async function getStaticProps(context) {
  return {
    props: {}, // 将作为props传递给页面组件
  }
}

接收的形参context为一个对象:

  • params 包含使用过动态路由页面的路由参数,如果页面文件名称是[name].js,那么params为{name:xxx,xxx:xxx...},它也可以跟getStaticPaths一起使用,后面再说!
 const {name} = context.params
  • preview 如果页面处于预览模式,则preview为true否则为undefined。这个属性可以在发请求时呈现页面而不是在构建时呈现,可以绕过静态生成预渲染阶段。
  • previewData 包含 setPreviewData 设置的预览数据
  • ...

 咋感觉后面的参数不太常用,具体可来这里看看基本特性: 获取数据 | Next.js | Next.js 中文网Next.js has 2 pre-rendering modes: Static Generation and Server-side rendering. Learn how they work here.https://www.nextjs.cn/docs/basic-features/data-fetching

 getStaticProps返回一个对象:

  • props 带有将页面组件接收的props可选对象
  • revalidate 以秒为单位的可选数量,之后可以重新生成页面,默认为false。当revalidate为false时,意味着没有重新验证,因此页面将被缓存为已构建,直到下一次构建
  • notFound 是一个布尔值,允许页面返回404状态,默认为true
export async function getStaticProps(context) {
  const res = await fetch(`https://.../data`)
  const data = await res.json()

  if (!data) {
    return {
      notFound: true,
    }
  }

  return {
    props: { data }
  }
}

Next.js 允许咱们在构建站点后创建或更新静态页面。增量静态重新生成 (I

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
黑马Node.js学习笔记是一本关于Node.js学习资料,其中包含了关于模块化规范的内容。模块化规范是对代码进行模块化的拆分与组合时需要遵守的规则。在Node.js中,模块可以分为内置模块、自定义模块和第三方模块。内置模块是由Node.js官方提供的,例如fs、path、http等。自定义模块是用户创建的每个.js文件,可以通过require方法加载。第三方模块是由第三方开发的模块,需要先下载后才能使用。在每个.js自定义模块中都有一个module对象,它存储了和当前模块有关的信息。注意,在同一个模块中不要同时使用exports和module.exports。在Node.js中,加载某个模块实际上是加载该模块的module.exports属性。npm是Node.js中的包管理工具,可以用于下载和管理第三方模块,而第三方模块也被称为包。总之,黑马Node.js学习笔记提供了关于Node.js模块化规范的详细解释和使用方法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [黑马程序员node.js学习笔记](https://blog.csdn.net/weixin_50523986/article/details/129937301)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值