首页 > web前端 > js教程 > 正文

通过示例快速学习 useActionState (Nextjs

聖光之護
发布: 2024-11-17 08:06:35
转载
860人浏览过

通过示例快速学习 useactionstate (nextjs

使用表单时,useactionstate 挂钩简化了捕获表单值并将其作为 formdata 传递到服务器操作的过程。

useactionstate 还通过使用服务器操作返回的值自动更新状态变量来管理状态。这对于渲染输入字段验证错误特别有帮助,如下面使用 zod 的示例所示。

form.tsx:

"use client";

import { useactionstate } from "react";
import { signup } from "../actions";

export default function signup() {
  const [state, action] = useactionstate(signup, {});

  return (
    <form action={action}>
      <div>
        <label htmlfor="username">username:</label>
        <input
          type="text"
          id="username"
          name="username"
          defaultvalue={state.username}
          required
        />
        {state.errors?.username && (
          <p classname="text-sm text-red-500">{state.errors.username}</p>
        )}
      </div>

      <div>
        <label htmlfor="password">password:</label>
        <input
          type="password"
          id="password"
          name="password"
          defaultvalue={state.password}
        />
        {state.errors?.password && (
          <p classname="text-sm text-red-500">{state.errors.password}</p>
        )}
      </div>
      <input type="submit" value="sign up" />
    </form>
  );
}
登录后复制

actions.ts:

"use server";

import { z } from "zod";

const SignUpSchema = z.object({
  username: z.string(),
  password: z
    .string()
    .min(8, { message: "Be at least 8 characters long" })
    .regex(/[a-zA-Z]/, { message: "Contain at least one letter." })
    .regex(/[0-9]/, { message: "Contain at least one number." })
    .regex(/[^a-zA-Z0-9]/, {
      message: "Contain at least one special character.",
    })
    .trim(),
});

export type SignUpActionState = {
  username?: string;
  password?: string;
  errors?: {
    username?: string[];
    password?: string[];
  };
};

export async function signUp(
  _prevState: SignUpActionState,
  form: FormData
): Promise<SignUpActionState> {
  const username = form.get("username") as string;
  const password = form.get("password") as string;

  const validatedFields = SignUpSchema.safeParse({
    username,
    password,
  });

  if (!validatedFields.success) {
    return {
      username,
      password,
      errors: validatedFields.error.flatten().fieldErrors,
    };
  }

  // process validated form inputs here

  return { username, password };
}
登录后复制

useactionstate 还返回一个 ispending 属性(示例),指示服务器操作的 promise 是否仍在解析。

android基础教程 张波等译 pdf版
android基础教程 张波等译 pdf版

《Android基础教程》内容完整丰富,具有较强的通用性,读者都能通过《Android基础教程》快速学习Android开发,提高相关技能。Android是谷歌公司开发的全新开源手机平台。《Android基础教程》是一部关于Android开发的基础教程,采用由浅入深、循序渐进的方式讨论Android。书中还结合数独游戏等实例更加形象生动地讲解了Android开发的基本流程,且每章最后都有一个“快速阅读指南”,更加方便了读者的阅读。android基础教程,美Ed_Bur

android基础教程 张波等译 pdf版 0
查看详情 android基础教程 张波等译 pdf版

参考 ispending 暂时禁用表单元素,例如提交按钮,以防止用户在正在进行的操作完成之前快速连续多次单击它。

useactionstate 与 useformaction 和 useformstatus

如果您熟悉 useformaction 和 useformstatus,您会发现 useactionstate 非常相似。

本质上,它结合了两个钩子的功能,并被重命名以反映服务器操作不仅仅适用于表单(您还可以将 useactionstate 与按钮和其他元素一起使用。)

请记住,useformstatus 从 next.js 15 开始已被弃用,因此您应该继续导入 useactionstate。

以上就是通过示例快速学习 useActionState (Nextjs的详细内容,更多请关注php中文网其它相关文章!

相关标签:
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:dev.to网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号