fix(frontend): guard against non-array selectedFields in renderFieldTags
When config.fields is a non-array value (e.g. empty object {}),
the fallback logic could still result in a non-array if both
config.fields and config.selectedFields are abnormal values.
Added double-guard: after the fallback chain, explicitly assert
Array.isArray before using selectedFields.includes().
Fixes: TypeError: _.includes is not a function on rules/new page.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -792,21 +792,22 @@ export function ReviewSettings({
|
||||
|
||||
// 渲染字段标签,确保已选择的字段即使在新的字段列表中不存在也会显示
|
||||
const renderFieldTags = (ruleId: string, config: Record<string, unknown>) => {
|
||||
// 获取规则的当前已选字段
|
||||
// 修复:对于exists类型规则,应该使用fields而不是selectedFields
|
||||
const selectedFields = Array.isArray(config.fields) ?
|
||||
config.fields as string[] :
|
||||
(Array.isArray(config.selectedFields) ? config.selectedFields as string[] : []);
|
||||
|
||||
// 获取规则的当前已选字段(防御性:确保总是数组)
|
||||
const rawSelected = Array.isArray(config.fields)
|
||||
? config.fields
|
||||
: (Array.isArray(config.selectedFields) ? config.selectedFields : []);
|
||||
const selectedFields: string[] = Array.isArray(rawSelected) ? rawSelected : [];
|
||||
|
||||
// 优先使用配置中存储的可用字段,如果没有则使用当前可用字段
|
||||
const fieldsToRender = Array.isArray(config.availableFields) ?
|
||||
config.availableFields as string[] :
|
||||
availableFields;
|
||||
|
||||
const rawFieldsToRender = Array.isArray(config.availableFields)
|
||||
? config.availableFields
|
||||
: availableFields;
|
||||
const fieldsToRender: string[] = Array.isArray(rawFieldsToRender) ? rawFieldsToRender : [];
|
||||
|
||||
return (
|
||||
<div className="field-tags">
|
||||
{fieldsToRender.map((field, index) => {
|
||||
// 使用includes方法检查选中状态
|
||||
// 使用includes方法检查选中状态(selectedFields 总是数组,不会抛错)
|
||||
const isSelected = selectedFields.includes(field);
|
||||
|
||||
return (
|
||||
|
||||
Reference in New Issue
Block a user