reactjs - ReactJs:没有索引的子键道具
问题描述
您好,我尝试在我的组件中使用索引作为键,但我最终从 eslint 和 reactjs 自己的文档中得到错误,他们建议在最后一个选项中使用索引研究我发现为每个组件生成一个 uuid,但这似乎代价高昂
这是我去 foreach 的数组:
export const Tags: ITag[] = [
{
Title: 'DashBoard',
Name: 'Default',
Link: '../dashboards',
Icon: AiOutlineDashboard,
DropdownItems: null,
},
{
Name: 'Analytic',
Link: '../dashboards',
Icon: AiOutlineLineChart,
DropdownItems: null,
},
{
Name: 'Inventory',
Link: '../dashboards',
Icon: BiStoreAlt,
DropdownItems: null,
},
{
Title: 'Pages',
Name: 'Employees',
Link: '../dashboards',
Icon: TiGroupOutline,
DropdownItems: [
{Name: 'Employee List', Link: '/eloBost'},
{Name: 'View Employee', Link: '/duoBoost'},
{Name: 'New Employee', Link: '/eloBost'},
{Name: 'Any', Link: '/duoBoost'},
],
},
{
Name: 'Departaments',
Link: '../dashboards',
Icon: FaRegBuilding,
DropdownItems: [
{Name: 'Elo Boost', Link: '/eloBost'},
{Name: 'Duo Boost', Link: '/duoBoost'},
{Name: 'MD10', Link: '/eloBost'},
{Name: 'Coaching', Link: '/duoBoost'},
{Name: 'Vitóriais', Link: '/duoBoost'},
],
},
{
Name: 'Products',
Link: '../dashboards',
Icon: BsLightning,
DropdownItems: [
{Name: 'Elo Boost', Link: '/eloBost'},
{Name: 'Duo Boost', Link: '/duoBoost'},
{Name: 'MD10', Link: '/eloBost'},
{Name: 'Coaching', Link: '/duoBoost'},
{Name: 'Vitóriais', Link: '/duoBoost'},
],
},
{
Name: 'Suppliers',
Link: '../dashboards',
Icon: BsBookmarkPlus,
DropdownItems: [
{Name: 'Elo Boost', Link: '/eloBost'},
{Name: 'Duo Boost', Link: '/duoBoost'},
{Name: 'MD10', Link: '/eloBost'},
{Name: 'Coaching', Link: '/duoBoost'},
{Name: 'Vitóriais', Link: '/duoBoost'},
],
},
{
Name: 'Contracts',
Link: '../dashboards',
Icon: BsFileEarmarkText,
DropdownItems: [
{Name: 'Elo Boost', Link: '/eloBost'},
{Name: 'Duo Boost', Link: '/duoBoost'},
{Name: 'MD10', Link: '/eloBost'},
{Name: 'Coaching', Link: '/duoBoost'},
{Name: 'Vitóriais', Link: '/duoBoost'},
],
},
{
Name: 'User List',
Link: '../dashboards',
Icon: RiGroupLine,
DropdownItems: [
{Name: 'Elo Boost', Link: '/eloBost'},
{Name: 'Duo Boost', Link: '/duoBoost'},
{Name: 'MD10', Link: '/eloBost'},
{Name: 'Coaching', Link: '/duoBoost'},
{Name: 'Vitóriais', Link: '/duoBoost'},
],
},
];
在我的 jsx 上,我滚动列表并执行以下操作:
{tags.map((item) => (
<>
{item.Title ? (
<TitleItem key={generateKey(item.Title.toString())} open={open}>
{item.Title}
</TitleItem>
) : (
""
)}
<TagList
open={open}
key={generateKey(item.Name.toString())}
sideBarStatus={open}
tag={item}
clickHandler={clickHandler}
/>
</>
))}
在我的 taglist 中,我必须通过数组中的一个数组:
{isOpen === true ? (
<OpenedStyled active={active}>
{dropItems.map((item) => (
<li className="li-open" key={generateKey(item.Name.toString())}>
<a href="#/">{item.Name}</a>
</li>
))}
</OpenedStyled>
) : (
<ClosedStyled>
{dropItems.map((item) => (
<li className="li-closed" key={generateKey(item.Name.toString())}>
<FaGhost size={18} />
<a href="#/">{item.Name}</a>
</li>
))}
</ClosedStyled>
)}
我的生成键:
export const generateKey = (pre: any) => {
return `${pre}_${new Date().getTime()}`;
};
ss:
带有控制台警告的代码沙盒: https ://codesandbox.io/s/recursing-bash-dn4l8?file=/src/App.tsx:5209-5772
解决方案
问题是您对包装片段的使用。这就是它抱怨没有钥匙的事情。你会看到如果你用一个有键的 DIV 替换你的包装片段,那个警告就会消失。这是您进行更改的示例:https ://codesandbox.io/s/nifty-chatterjee-t2ic1
推荐阅读
- android - 如何修复:错误:org.json.JSONException:输入在字符 0 处结束
- java - 如何通过换行符和固定数量的制表符拆分字符串,如 Java 中的“\n\t”?
- architecture - 同一应用程序中向自己发送事件/命令的组件
- flutter - 颤振通知没有响起任何声音
- c++ - 指针自动指向内存地址
- ios - 条带反应本机ios的未定义错误
- php - PHP Spreadsheet 从单元格获取图像 TMP 以上传图像
- sql - hive ql如何根据关键字表进行通配符搜索
- php - 使用lazychaser/laravel-nestedset,保存模型后parent_id列设置为null
- flutter - 当我尝试在颤振项目中运行时,但收到以下警告