jeecgboot/JeecgBoot · error
[JVxeTable] ${$type} 组件尚未注册,获取增强失败
Error message
[JVxeTable] ${$type} 组件尚未注册,获取增强失败 What it means
getEnhanced(type) lazily builds and caches a per-type 'enhanced' configuration object (merged from the component's enhanced definition and a default). It first checks componentMap for the type; if absent, the type was never registered via addComponent, so there is no enhanced definition to merge, and it throws. This is called by JVxeTable internals when rendering a column whose type has no registered cell component.
Source
Thrown at jeecgboot-vue3/src/components/jeecg/JVxeTable/src/utils/enhancedUtils.ts:36
if (componentMap.has($type)) {
let enhanced = componentMap.get($type)?.enhanced ?? {};
if (isObject(enhanced)) {
Object.keys(defaultEnhanced).forEach((key) => {
let def = defaultEnhanced[key];
if (enhanced.hasOwnProperty(key)) {
// 方法如果存在就不覆盖
if (!isFunction(def) && !isString(def)) {
enhanced[key] = Object.assign({}, def, enhanced[key]);
}
} else {
enhanced[key] = def;
}
});
enhancedMap.set($type, <JVxeComponent.Enhanced>enhanced);
return <JVxeComponent.Enhanced>enhanced;
}
} else {
throw new Error(`[JVxeTable] ${$type} 组件尚未注册,获取增强失败`);
}
enhancedMap.set($type, <JVxeComponent.Enhanced>defaultEnhanced);
}
return <JVxeComponent.Enhanced>enhancedMap.get($type);
}
/** 辅助方法:替换${...}变量 */
export function replaceProps(col, value) {
if (value && typeof value === 'string') {
let text = value;
text = text.replace(/\${title}/g, col.title);
text = text.replace(/\${key}/g, col.key);
text = text.replace(/\${defaultValue}/g, col.defaultValue);
return text;
}
return value;
}
View on GitHub (pinned to 96fb33f5ec)
Solutions
- Register the missing cell type via addComponent before the table renders (e.g. in registerThirdComp.ts).
- Verify the column config's type string exactly matches a registered JVxeTypes value (case-sensitive).
- If the type is optional, ensure the dynamic import that registers it has completed before rendering the table.
- Add a fallback/default cell so unknown types degrade gracefully instead of throwing.
Example fix
// before — column references unregistered type
{ key: 'x', type: 'myCustomCell' } // never registered -> getEnhanced throws
// after — register before render
addComponent(JVxeTypes.myCustomCell, MyCustomCell);
// then the column renders correctly Defensive patterns
Strategy: validation
Validate before calling
import { componentMap } from './componentMapStore';
function getEnhancedOrNull(type) {
if (!componentMap.has(type)) {
console.warn(`JVxe type ${type} not registered; using default cell`);
return useDefaultEnhanced();
}
return getEnhanced(type);
} Type guard
import { componentMap } from './componentMapStore';
const isCellTypeRegistered = (type: string): boolean => componentMap.has(type as JVxeTypes); Try / catch
try {
const enhanced = getEnhanced(type);
} catch (e) {
// fall back to a default cell or register the missing type
} Prevention
- Register all required cell types before rendering backend-driven tables.
- Validate column type strings against componentMap before render.
- Ensure dynamic imports for optional cell types complete first.
When it happens
Trigger: A JVxeTable column declares a `type` (e.g. a custom or mistyped JVxeTypes value) for which no addComponent call has run. Common when reading column configs from backend metadata that references a type the frontend never registered, or when a registered type name has a typo/casing mismatch.
Common situations: Backend-driven online form/table configs referencing a cell type not enabled in the frontend build; a feature-flagged cell type whose registration is behind a lazy import that hasn't resolved; typo in the JVxeTypes enum value used in column definition.
Related errors
- 【addComponent】不能使用"${type}"作为组件的name,因为这是关键字。
- 【addComponent】组件"${type}"已存在
- useDescription() can only be used inside setup() or function
- useTableContext must be used after createTableContext
- sys.api.apiRequestFailed
AI-assisted analysis of jeecgboot/JeecgBoot@96fb33f5ec (2026-08-14).
Data as JSON: /api/errors/a97a1b80a97f2f7e.
Report an issue: GitHub.