refactor(vxe-table): 重构 useTableForm 函数实现并优化初始化逻辑

- 将 useTableForm 从箭头函数改为普通函数声明
- 简化表单工厂函数的获取逻辑,支持上下文注入
- 移除初始化时的重复上下文注入代码
- 改进错误提示信息的准确性
- 调整代码结构以提高可读性和维护性
- 将 SetupVxeTable 接口中的 useVbenForm 字段改为可选参数
This commit is contained in:
Jin Mao
2026-03-25 14:42:31 +08:00
parent 79408d406d
commit a7ca7cdb9f
2 changed files with 22 additions and 25 deletions

View File

@@ -43,19 +43,19 @@ function normalizeVxeLocale<T extends Record<string, any>>(localeModule: T) {
) as T;
}
export const useTableForm = ((...args: any[]) => {
export function useTableForm(...args: any[]) {
const pluginsOptions = injectPluginsOptions();
const contextFormFactory = pluginsOptions?.form?.useVbenForm;
if (!tableFormFactory) {
if (pluginsOptions?.form?.useVbenForm) {
tableFormFactory = pluginsOptions.form.useVbenForm;
} else {
throw new Error('useTableForm is not initialized');
}
const factory = tableFormFactory || contextFormFactory;
if (!factory) {
throw new Error(
'useTableForm is not initialized. Please provide useVbenForm via setupVbenVxeTable() or providePluginsOptions()',
);
}
return tableFormFactory(...args);
});
return factory(...args);
}
// 部分组件如果没注册vxe-table 会报错,这里实际没用组件,只是为了不报错,同时可以减少打包体积
const createVirtualComponent = (name = '') => {
@@ -109,12 +109,10 @@ export function setupVbenVxeTable(setupOptions: SetupVxeTable) {
initVxeTable();
const pluginsOptions = injectPluginsOptions();
const useVbenFormFromContext = pluginsOptions?.form?.useVbenForm;
// 优先级:参数传入 > context 注入
tableFormFactory = useVbenFormFromParam || useVbenFormFromContext;
// 优先使用参数传入的 useVbenFormcontext 注入在 useTableForm 中获取
if (useVbenFormFromParam) {
tableFormFactory = useVbenFormFromParam;
}
const { isDark, locale } = usePreferences();
const localMap = {