网站首页 > 知识剖析 正文
大家好,很高兴又见面了,我是姜茶的编程笔记,我们一起关注、学习前端相关领域技术,共同进步,也欢迎大家关注、点赞、收藏、转发,您的支持是我不断创作的动力
封面图: 喜欢的可以在评论区告诉我,我发你原图哦
在现代 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-27 前端中JS的字符编码及常用操作字符API
- 2024-12-27 更好搜索体验,火狐Firefox33.0.0.5397官方下载
- 2024-12-27 Fuse.js - 免费开源、小巧无依赖的模糊搜索 JavaScript 工具库
- 2024-12-27 JavaScript字符串charAt()方法教程
- 2024-12-27 Firefox火狐浏览器126版更新修复PDF.js漏洞
- 2024-12-27 JS原生对字符串操作的常用方法 原生js怎么获取子元素
- 2024-12-27 新增忘记按钮,火狐浏览器Firefox33.1官方下载
- 2024-12-27 使用JShaman进行JS代码加密时,保留字的作用
- 2024-12-27 Python教程:第9篇 字符串基本操作
- 2024-12-27 Web3系列教程之入门篇——1:了解React (Next.js)
- 最近发表
-
- jQuery EasyUI使用教程:创建展开行详细编辑表单的CRUD应用
- CSDN免登陆复制代码的几种方法(csdn扫码登录怎么实现的)
- LayUi提高-Select控件使用(layui form select)
- 用 Playwright MCP 让 AI 改它自己写的屎山代码
- multiple-select.js中手动设置全选和取消全选
- 前端实现右键自定义菜单(html 自定义右键菜单)
- JavaScript脚本如何断言select下拉框的元素内容?
- 广州蓝景分享—实用的CSS技巧,助你成为更好的前端开发者
- MyBatis-Plus码之重器 lambda 表达式使用指南,开发效率瞬间提升80%
- Go语言之select的使用和实现原理(go select case)
- 标签列表
-
- xml (46)
- css animation (57)
- array_slice (60)
- htmlspecialchars (54)
- position: absolute (54)
- datediff函数 (47)
- array_pop (49)
- jsmap (52)
- toggleclass (43)
- console.time (63)
- .sql (41)
- ahref (40)
- js json.parse (59)
- html复选框 (60)
- css 透明 (44)
- css 颜色 (47)
- php replace (41)
- css nth-child (48)
- min-height (40)
- xml schema (44)
- css 最后一个元素 (46)
- location.origin (44)
- table border (49)
- html tr (40)
- video controls (49)