MUI Autocomplete组件仍触发唯一key属性警告,求解决方案
MUI Autocomplete 组件 "key" 警告问题解决建议
你遇到的警告:Warning: Each child in a list should have a unique "key" prop.,即使给renderOption和renderTags加了key仍存在,核心问题在于key的生成逻辑不够可靠,或者没有正确复用/指定唯一标识。结合你的代码和meetingId是数据库唯一值的特性,给出以下修改方案:
问题分析
- renderOption 部分:你解构了props中的key并拼接新key,但MUI的
renderOption传入的props已经包含组件内部生成的key,拼接操作反而可能导致key重复或不稳定; - renderTags 部分:依赖
getTagProps返回的基于index的key,当选项顺序变化(如删除标签)时,key会失效,且无法保证唯一性。
修改后的代码
<Autocomplete multiple limitTags={2} options={allMeetings} getOptionLabel={(option) => option.title} // 修复renderOption的key逻辑 renderOption={(props, option) => { // 直接使用数据库唯一的meetingId作为key,无需拼接 return ( <li {...props} key={option.meetingId} style={{flexDirection: "column", justifyContent: "flex-start"}}> <Typography variant='subtitle1'>{option.title}</Typography> <Typography variant='caption'>{option.date} - {option.startTime}</Typography> </li> ) }} // 修复renderTags的key逻辑 renderTags={(tagValue, getTagProps) => { return tagValue.map((option) => { const tagProps = getTagProps({ option }); // 用meetingId作为唯一key,替代基于index的key return <Chip {...tagProps} key={option.meetingId} label={option.title} /> }) }} renderInput={(params) => { return <TextField {...params} label="Meetings"/> }} />
关键修改点
- renderOption:直接使用
option.meetingId作为key,它是数据库唯一标识,完全满足key的唯一性要求,无需依赖组件内部生成的key或拼接操作; - renderTags:遍历标签时,不再使用index或
getTagProps返回的key,而是用每个选项的meetingId作为key,避免因选项顺序变化导致的key不稳定问题; - 移除了
renderInput中多余的index参数,该参数原本就不存在,属于冗余代码。
内容的提问来源于stack exchange,提问作者Amanda Ortiz
相关产品推荐
相关产品推荐

