Skip to main content

查询表单 SearchForm

SearchForm 是一个基于 react-hook-form 封装的动态搜索表单组件,支持字段配置、国际化、多列响应式布局、外部控制提交与重置等能力,适用于常见列表页搜索场景。


📦 引入方式

import { SearchForm } from '@npmqg/react-ui-searchform';

🧩 使用示例

📚 基础使用


🧩 Props

属性名类型默认值说明
searchParamListSearchFormItem[][]表单字段配置数组,每项包含唯一 key 和对应的表单控件 ReactNode
defaultValuesRecord<string, any>{}表单默认值对象
onSearch(values: Record<string, any>) => void()=>{}表单提交时触发,返回当前字段值对象
noSearchbooleanfalse是否禁用组件挂载时自动执行一次 onSearch

🔁 Ref 暴露方法

使用 forwardRef 暴露以下方法,支持父组件远程控制:

{
searchForm: UseFormReturn;
onSubmit: () => void;
onReset: () => void;
}

示例获取方式:

const formRef = useRef();
<SearchForm ref={formRef} ... />

🧠 组件特性

📚 国际化支持

所有表单项的 label 会自动通过 Intl.v() 获取当前语言对应的翻译文本。

📚 响应式布局

表单默认 1~5 列响应式布局,自动适配不同屏幕尺寸:

grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-5

📚 表单组件自动绑定

组件内部自动将 react-hook-formcontrolname 注入到子表单组件中:

React.cloneElement(item.value, {
name: item.key,
control: searchForm.control,
});

🧾 类型定义说明(简化)

interface ISearchFormProps {
searchParamList: {
key: string;
value: React.ReactElement;
}[];
defaultValues?: Record<string, any>;
onSearch?: (data: Record<string, any>) => void;
noSearch?: boolean;
}

📌 注意事项

  • 所有传入的表单子组件必须支持 react-hook-formcontrolname 绑定。
  • 如果使用国际化 label,请保证所有组件 label 都通过 props.label 提供。
  • 若表单项较复杂(如联动、异步加载),建议自行封装成独立组件再放入 value