网站首页 > 技术文章 正文
大家好,很高兴又见面了,我是姜茶的编程笔记,我们一起关注、学习前端相关领域技术,共同进步,也欢迎大家关注、点赞、收藏、转发,您的支持是我不断创作的动力
封面图: 喜欢的可以在评论区告诉我,我发你原图哦
在现代 Web 开发中,动态搜索表单是一个常见的需求。本文将介绍如何使用 React 和 Next.js 创建一个动态搜索表单,并将搜索状态与 URL 同步,以便于用户分享和保存搜索结果。
代码概述
我们将创建一个名为 SearchForm 的 React 函数组件,该组件接收一个 search 属性,并使用该属性初始化搜索输入框的状态。组件还将处理表单提交事件,并将搜索状态更新到 URL 中。
完整代码
以下是实现该功能的完整代码,并包含了中文注释:
import { useRouter, usePathname } from 'next/navigation';
import { useSearchParams } from 'next/navigation';
import { useState } from 'react';
export default function SearchForm({
search,
}: {
// 提取 `URLSearchParams` 并将其传递给组件
search: string | undefined;
}) {
const router = useRouter();
const searchParams = useSearchParams();
const pathname = usePathname();
const [searchText, setSearchText] = useState(search ?? "");
return (
<form
onSubmit={(e) => {
e.preventDefault();
// 使用 `URLSearchParams` 将状态更新到 URL 中
const newSearchParams = new globalThis.URLSearchParams(searchParams);
newSearchParams.set("search", searchText);
router.push(`${pathname}?${newSearchParams.toString()}`);
}}
>
<Input
type="search"
name="search"
value={searchText}
onChange={setSearchText}
/>
</form>
);
}
代码浅析
定义 SearchForm 组件
export default function SearchForm({
search,
}: {
/// 提取 `URLSearchParams` 并将其传递给组件
search: string | undefined;
}) {
const router = useRouter();
const searchParams = useSearchParams();
const pathname = usePathname();
SearchForm 是一个接收 search 属性的函数组件。我们使用 useRouter 获取路由对象,用 useSearchParams 获取当前 URL 的搜索参数,用 usePathname 获取当前路径名。
渲染表单
return (
<form
onSubmit={(e) => {
e.preventDefault();
/// 使用 `URLSearchParams` 将状态更新到 URL 中
const newSearchParams = new globalThis.URLSearchParams(searchParams);
newSearchParams.set("search", searchText);
router.push(`${pathname}?${newSearchParams.toString()}`);
}}
>
<Input
type="search"
name="search"
value={searchText}
onChange={setSearchText}
/>
</form>
);
}
当表单提交时,函数首先阻止默认的提交行为,然后使用 URLSearchParams 创建一个新的搜索参数对象,更新搜索参数为当前的 searchText,并使用 router.push 方法将新的搜索参数推送到 URL 中。
代码中globalThis 是一个全局对象,可以在任何环境中访问全局对象(例如 window 在浏览器中,global 在 Node.js 中)。URLSearchParams 是一个用于处理 URL 查询参数的接口。
总结
我们学习了:
- 如何使用 React 和 Next.js 创建一个动态搜索表单
- 将搜索状态同步到 URL 中。这样做不仅提升了用户体验,还使得用户可以方便地分享和保存搜索结果。
喜欢看图的同学 :
最后
如果你有任何问题或建议,欢迎在评论区留言交流!
Happy coding!
- 上一篇: 短视频文案提取的简单实现
- 下一篇: 实习经历总结,我到底收获了什么?
猜你喜欢
- 2024-12-09 短视频文案提取的简单实现
- 2024-12-09 Python应用短文,如何自制一个简易的网络爬虫
- 2024-12-09 面试官:如何用javascript存储函数?
- 2024-12-09 每个前端人都应该知道的20个TypeScript技巧
- 2024-12-09 JavaScript提升:掌握深拷贝与浅拷贝的技巧及如何手写深拷贝
你 发表评论:
欢迎- 07-07使用AI开发招聘网站(100天AI编程实验)
- 07-07Tailwindcss 入门(tailwindcss中文文档)
- 07-07CSS 单位指南(css计量单位)
- 07-07CSS 定位详解(css定位属性的运用)
- 07-07程序员可以作为终身职业吗?什么情况下程序员会开始考虑转行?
- 07-07云和学员有话说:国企转行前端开发,斩获13K高薪!
- 07-0791年转行前端开发,是不是不该转,有啥风险?
- 07-07计算机图形学:变换矩阵(图形学 矩阵变换)
- 594℃几个Oracle空值处理函数 oracle处理null值的函数
- 587℃Oracle分析函数之Lag和Lead()使用
- 575℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 572℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 568℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 561℃【数据统计分析】详解Oracle分组函数之CUBE
- 548℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 541℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端react (48)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- 前端懒加载 (49)
- 前端获取当前时间 (50)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle 中文 (51)
- oracle的函数 (57)
- 前端调试 (52)
本文暂时没有评论,来添加一个吧(●'◡'●)