在 Next.js 中如何构建服务器端渲染的表单

阅读时长 10 分钟读完

在 Next.js 中如何构建服务器端渲染的表单

随着 Web 应用程序的发展,表单是我们必须处理的核心部分。在许多情况下,表单是用来创建和编辑数据实体的主要界面。虽然客户端渲染的表单通常非常流畅,但它们存在一些限制,比如安全性和可访问性问题。

为了解决这些问题,将表单渲染到服务器上可以大大减轻这些风险。Next.js 是一个支持服务器端渲染的 React 应用程序框架,因此它非常适合处理服务器渲染的表单。在本文中,我们将介绍如何在 Next.js 中构建服务器端渲染的表单。

  1. 创建表单

首先,我们需要创建一个表单。我们可以使用 HTML 和 React 来构建表单。下面是一个使用 React 组件来创建表单的示例:

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

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

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

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

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

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

该表单具有“名称”和“电子邮件”字段,以及一个提交按钮。当提交按钮被点击时,handleSubmit 函数将被调用,之后会将表单数据打印到控制台中。

  1. 服务器端渲染

接下来,我们需要为表单创建一个服务器端渲染的版本。Next.js 提供了 getServerSideProps 函数来处理服务器端渲染,它允许我们在渲染时获取服务器端数据并将其传递到页面组件中。在我们的例子中,我们希望获取表单的初始值并将其传递给组件。

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

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

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

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

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

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

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

我们将初始名称和电子邮件值作为组件的属性传递,然后使用它们来初始化我们的 useState 钩子。我们还使用 getServerSideProps 函数从服务器获取这些值,并将它们传递给表单组件作为其属性。

在这种情况下,我们返回了固定的值。在实际情况中,我们可以使用任何 Node.js API 来获取数据,例如从数据库获取值。

  1. 表单验证

表单验证是安全性和用户友好性的关键部分。在客户端渲染中,我们通常使用前端框架的验证库来验证表单。在服务器端渲染中,我们可以使用类似的库。在我们的例子中,我们将使用 Joi 来验证表单。

首先,我们需要安装 Joi:

然后,在我们的表单中使用 Joi 来验证表单数据:

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

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

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

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

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

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

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

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

      -------
    -

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

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

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

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

在这个例子中,我们在顶部定义了一个 Joi 模式对象,该对象定义了如何验证名称和电子邮件值。在处理表单提交时,我们使用模式对象来验证表单数据。如果有错误,我们会将它们保存在状态中,并用于显示验证错误消息。

现在我们的表单在服务器端渲染,同时还可以进行有效的输入验证!

结论

在 Next.js 中构建服务器端渲染的表单是很简单的。我们可以使用 React 和任何要求的 Node.js API 来创建表单和获取数据,然后使用 Joi 进行表单验证。虽然这里只是演示了一些简单的功能,但你也可以根据具体需要对表单进行更高级的构建和扩展。

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

纠错
反馈