查询表单 SearchForm
SearchForm
是一个基于 react-hook-form
封装的动态搜索表单组件,支持字段配置、国际化、多列响应式布局、外部控制提交与重置等能力,适用于常见列表页搜索场景。
📦 引入方式
import { SearchForm } from '@npmqg/react-ui-searchform';
🧩 使用示例
📚 基础使用
- 示例
- 源码
import { useMemo, useRef } from "react";
import { Button, Divider, Input, Space } from "@npmqg/react-ui-core";
import { SearchForm } from "@npmqg/react-ui-searchform";
import {
FormControl,
FormField,
FormItem,
FormLabel,
FormMessage,
} from "@npmqg/react-ui-form";
export default function DemoSearchForm() {
const formRef = useRef();
const searchList = useMemo(
() => [
{
key: "mobile1",
value: (
<FormField
render={({ field }) => (
<FormItem>
<FormLabel>手机号1</FormLabel>
<FormControl>
<Input maxLength={20} placeholder="请输入手机号" {...field} />
</FormControl>
<FormMessage />
</FormItem>
)}
/>
),
defaultValue: "",
},
{
key: "mobile2",
value: (
<FormField
render={({ field }) => (
<FormItem>
<FormLabel>手机号2</FormLabel>
<FormControl>
<Input maxLength={20} placeholder="请输入手机号" {...field} />
</FormControl>
<FormMessage />
</FormItem>
)}
/>
),
defaultValue: "",
},
{
key: "mobile3",
value: (
<FormField
render={({ field }) => (
<FormItem>
<FormLabel>手机号3</FormLabel>
<FormControl>
<Input maxLength={20} placeholder="请输入手机号" {...field} />
</FormControl>
<FormMessage />
</FormItem>
)}
/>
),
defaultValue: "",
},
{
key: "mobile4",
value: (
<FormField
render={({ field }) => (
<FormItem>
<FormLabel>手机号4</FormLabel>
<FormControl>
<Input maxLength={20} placeholder="请输入手机号" {...field} />
</FormControl>
<FormMessage />
</FormItem>
)}
/>
),
defaultValue: "",
},
],
[]
);
return (
<div>
<Space>
<Button onClick={() => formRef.current?.onSubmit()}>搜索</Button>
<Button onClick={() => formRef.current?.onReset()}>重置</Button>
</Space>
<Divider />
<SearchForm
ref={formRef}
searchParamList={searchList}
defaultValues={{ name: "", role: "" }}
onSearch={(values) => console.log("搜索条件:" + JSON.stringify(values))}
/>
</div>
);
}
🧩 Props
属性名 | 类型 | 默认值 | 说明 |
---|---|---|---|
searchParamList | SearchFormItem[] | [] | 表单字段配置数组,每项包含唯一 key 和对应的表单控件 ReactNode |
defaultValues | Record<string, any> | {} | 表单默认值对象 |
onSearch | (values: Record<string, any>) => void | ()=>{} | 表单提交时触发,返回当前字段值对象 |
noSearch | boolean | false | 是否禁用组件挂载时自动执行一次 onSearch |
🔁 Ref 暴露方法
使用 forwardRef
暴露以下方法,支持父组件远程控制:
{
searchForm: UseFormReturn;
onSubmit: () => void;
onReset: () => void;
}
示例获取方式:
const formRef = useRef();
<SearchForm ref={formRef} ... />