How can I add unique keys to React/MUI Autocomplete component?(如何将唯一键添加到Reaction/MUI自动完成组件?)
本文介绍了如何将唯一键添加到Reaction/MUI自动完成组件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试创建一个Material-UIAutocomplete
组件,该组件本质上只向用户显示搜索结果。一些选项的名称将是重复的,但它们都将具有唯一的ID。几个小时以来,我一直在尝试修复以下警告,但始终无法解决。
index.js:1警告:遇到两个具有相同密钥的子项Name B
。密钥应该是唯一的,以便组件在更新期间保持其标识。非唯一键可能会导致子项被重复和/或省略-该行为不受支持,在将来的版本中可能会更改。
我已尝试将key={}
添加到代码中的许多位置,但均无济于事。
代码附加在下面,我对此相当陌生,因此也欢迎就如何改进代码的"睡觉"提出任何建议。
const SearchField = () => {
const [open, setOpen] = React.useState(false)
const [searchQuery, setSearchQuery] = React.useState('')
const [searchResults, setSearchResults] = React.useState([])
const loading = true //later
const debounced = useDebouncedCallback(
async searchQuery => {
if (searchQuery) {
let result = await doSearch(searchQuery)
if (result.status === 200) {
setSearchResults(result.data)
} else {
console.error(result)
}
}
},
1000
)
const handleInputChange = e => {
if (e.target.value && e.target.value !== searchQuery) {
debounced(e.target.value)
setSearchQuery(e.target.value)
}
}
const options = [{
name: 'Name A',
id: 'entry_0597856'
},{
name: 'Name B',
id: 'entry_3049854'
},{
name: 'Name B',
id: 'entry_3794654'
},{
name: 'Name C',
id: 'entry_9087345'
}]
return (
<Autocomplete
id='search_freesolo'
freeSolo
selectOnFocus
clearOnBlur
handleHomeEndKeys
autoHighlight
onInputChange={handleInputChange}
open={true}
onOpen={() => setOpen(true)}
onClose={() => setOpen(false)}
loading={loading}
key={option => option.id}
options={options}
getOptionLabel={option => option.name}
renderOption={(props, option) => (
<Box
component='li'
{...props}
>
{option.name}
</Box>
)}
renderInput={params => {
return (
<TextField
{...params}
required
id="search_bar"
label="Search"
InputProps={{
...params.InputProps,
endAdornment: (
<React.Fragment>
{loading ? <CircularProgress size={18} /> : null}
{params.InputProps.endAdornment}
</React.Fragment>
)
}}
/>
)}
}
/>
)
}
推荐答案
您可以定义自己的renderOption
,它可以返回具有正确键值的列表项。您的代码会抱怨密钥重复,因为默认情况下,Autocomplete
uses thegetOptionLabel(option)
要检索密钥:
<Autocomplete
renderOption={(props, option) => {
return (
<li {...props} key={option.id}>
{option.name}
</li>
);
}}
renderInput={(params) => <TextField {...params} label="Movie" />}
/>
如果仍然不起作用,请检查您的道具顺序,如果您将其放在回调提供的道具之前,则需要最后声明关键道具:
<Box component='li' key={key} {...props}
则它将被来自MUI的props.key
覆盖。应该是这样的:
<Box component='li' {...props} key={key}
实时演示
这篇关于如何将唯一键添加到Reaction/MUI自动完成组件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:如何将唯一键添加到Reaction/MUI自动完成组件?


猜你喜欢
- 我不能使用 json 使用 react 向我的 web api 发出 Post 请求 2022-01-01
- 如何向 ipc 渲染器发送添加回调 2022-01-01
- 在不使用循环的情况下查找数字数组中的一项 2022-01-01
- 从原点悬停时触发 translateY() 2022-01-01
- 如何调试 CSS/Javascript 悬停问题 2022-01-01
- 是否可以将标志传递给 Gulp 以使其以不同的方式 2022-01-01
- 如何显示带有换行符的文本标签? 2022-01-01
- 为什么悬停在委托事件处理程序中不起作用? 2022-01-01
- 为什么我的页面无法在 Github 上加载? 2022-01-01
- 使用 iframe URL 的 jQuery UI 对话框 2022-01-01