如何使用 Next.js + Firebase 构建 Web 应用

阅读时长 9 分钟读完

本文将介绍如何使用 Next.js 和 Firebase 快速构建基于 React 的 Web 应用,并且将重点放在如何结合 Next.js 和 Firebase 的使用,以及如何进行优化与缓存方案。我们将通过一个在线相册网站来演示这个过程,完整代码可以在 Github 上查看。

前置知识

本文需要读者具备以下基础知识:

  • React.js 相关基础知识
  • Node.js 和 npm 的基础使用
  • Firebase 功能和使用的基础知识

如果您还不熟悉这些基础知识,请先学习这些内容。

第一步:创建项目

首先,我们使用 create-next-app 工具创建项目:

然后在项目目录下安装 Firebase:

第二步:配置 Firebase

在 Firebase 官网创建新项目,并且在项目设置中获取配置信息,其中包含配置 Firebase 的 SDK 和初始化应用程序所需的配置。

我们需要在项目中添加这个配置信息以及其他的 Firebase 服务,因此创建一个名为 firebase.js 的文件,放置在 /lib 文件夹下:

-- -------------------- ---- -------
------ -------- ---- ---------------
------ ---------------------

----- -------------- - -
  ------- ---------------
  ----------- -------------------
  ------------ --------------------
  ---------- ------------------
  -------------- ----------------------
  ------------------ -----------------
  ------ --------------
--

-- ----------------------- -
  ---------------------------------------
-

------ ----- --------- - ---------------------

第三步:构建 Next.js 页面

我们将创建一个基于 Next.js 的页面,并将相册数据从 Firebase 数据库获取。在此之前,我们需要使用 getStaticProps 函数从 Firebase 数据库获取相册数据,然后将数据作为 props 传递给页面。

关于 getStaticProps 函数:

  • 可以仅在服务器端运行
  • 在构建时运行,仅在构建时运行,不在客户端运行(这对于 SEO 优化非常有用)
  • 被称为“静态生成”,因为它只在构建时运行,然后页面被“生成”为静态 HTML
-- -------------------- ---- -------
------ - --------- - ---- ---------------------

------ ----- -------- ---------------- -
  ----- ------ - ---
  ----- -------- - ----- -------------------------------------

  ---------------------- -- -
    ------------------------
  ---

  ------ -
    ------ -
      -------
    --
  --
-

------ ------- -------- ----------- ------ -- -
  ------ -
    -----
      ------------------- ------ -- -
        ---- ------------
          ----------------------
          --------------------------
        ------
      ---
    ------
  --
-

这样,我们就可以在页面中访问使用 getStaticProps 获取的数据。

第四步:实现上传图片功能

接下来,我们需要实现上传图片的功能。使用 Firebase,我们可以很容易地存储和获取客户端上传的文件。我们可以使用 firebase.storage.ref() 方法创建一个文件存储引用,并使用 put() 方法在 Firebase 存储中放置文件。

-- -------------------- ---- -------
------ - -------- - ---- --------
------ - --------- - ---- ---------------------
------ -------- ---- ---------------
------ -------------------

------ ----- -------- ---------------- -
  ----- ------ - ---
  ----- -------- - ----- -------------------------------------

  ---------------------- -- -
    ------------------------
  ---

  ------ -
    ------ -
      -------
    --
  --
-

------ ------- -------- ----------- ------ -- -
  ----- ----------- ------------- - ----------------

  ----- ------------ - ----- ------- -- -
    -------------------

    -- ------ ----- -- -------- -------
    ----- --------- - ----------------------
    ----- ---------- - -------------------------
    ----- -------- - ---------------------------------
    ----- ------------------------

    -- --- -------- ----- --- ---- -------- -------
    ----- -------- - ----- --------------------------

    -- --- ----- ---- -- ---------
    ----- ------------------------------------
      ------ ---- -------
      ---- ---------
      ---------- ------------------------------------------------
    ---

    ------------------
  --

  ------ -
    -----
      ------ ----------- ----------------------- -------------------- --
      ---------- -- --------------------------
      ------------------- ------ -- -
        ---- ------------
          ----------------------
          --------------------------
          ---- --------------- ----------------- --
        ------
      ---
    ------
  --
-

现在,我们的页面允许用户上传图片并将其存储到 Firebase 存储中,并将图片数据添加到 Cloud Firestore 中。

第五步:添加缓存

由于 getStaticProps 函数只在构建时运行,因此我们需要使用 Next.js 的 Incremental Static Regeneration(ISR)功能来更新我们的页面。ISR 允许我们在访问页面时重新生成页面,而不是在构建过程中重新生成整个页面。这可以大大减少页面的加载时间。假设我们的相册条目在每天更新一次,我们可以使用 ISR 来更新相册数据。

我们可以使用 Next.js 中的 revalidate 属性来指定我们希望页面在访问时重新生成之前等待多长时间。在下面的示例代码中,我们将 revalidate 属性设置为 1 秒。

-- -------------------- ---- -------
------ - --------- - ---- ---------------------

------ ----- -------- ---------------- -
  ----- ------ - ---
  ----- -------- - ----- -------------------------------------

  ---------------------- -- -
    ------------------------
  ---

  ------ -
    ------ -
      -------
    --
    ----------- --
  --
-

------ ------- -------- ----------- ------ -- -
  ------ -
    -----
      ------------------- ------ -- -
        ---- ------------
          ----------------------
          --------------------------
          ---- --------------- ----------------- --
        ------
      ---
    ------
  --
-

这样,我们就可以使用 Next.js 的 ISR 功能来缓存相册数据,以提高页面的加载速度。

总结

本文介绍了如何使用 Next.js 和 Firebase 构建基于 React 的 Web 应用,并重点讨论了如何结合 Next.js 和 Firebase 的使用,以及如何进行优化和缓存方案。通过一个在线相册网站的示例,我们演示了如何在页面中获取 Firebase 数据并上传图像。

最后,我们演示了如何使用 Next.js 的 ISR 功能添加缓存,以提高页面加载速度。希望这篇文章对你有所帮助,能让你更好地了解如何使用 Next.js 和 Firebase 开发 Web 应用。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64dcd325f6b2d6eab37e2ca0

纠错
反馈