gpt4 book ai didi

reactjs - Material-UI useAutocomplete 无法访问 onChange 中的选项

转载 作者:行者123 更新时间:2023-12-04 07:51:13 24 4
gpt4 key购买 nike

我不知道我做错了什么,但我无法访问 option.slug从我从 API 收到的对象。我正在尝试更改传递 URL slug 并更改我的应用程序的路由。我正在尝试使用 onChange 来做到这一点 Prop 在我的 useAutocomplete()定义。
访问 option.slug或任何其他属性在我的 JSX 结构中运行良好。如您所见,我正在抓取 option.title等等来呈现我的列表项,效果很好......
我没有捕获实际的弹头,而是不断获得“/components/undefined”的路线
但是当我尝试访问 option.slug 时在 useAutocomplete() 中我的组件的顶层定义它似乎不起作用。不过,根据原始文档,这就是这样做的方法。
https://material-ui.com/components/autocomplete/#useautocomplete

export default function NavigationSearch({ onClose, results }) {
const router = useRouter();

const {
getRootProps,
getInputLabelProps,
getInputProps,
getListboxProps,
getOptionProps,
groupedOptions
} = useAutocomplete({
id: 'use-autocomplete-demo',
options: results,
getOptionLabel: (option) => option.title,
onChange: (option) => router.push(`/components/${option.slug}`)
});

return (
<React.Fragment>
{/* 1. SEARCH INPUT */}
<Container maxWidth="md" disableGutters>
<Box display="flex" width="100%">
<motion.div
style={{ width: 'inherit' }}
initial="hidden"
animate="visible"
variants={animation}>
<Box display="flex" width="inherit">
<Search width="inherit" {...getRootProps()}>
<SearchIcon color="primary" />
<InputBase
placeholder="Search for components, patterns..."
style={{ color: 'inherit', width: 'inherit' }}
autoFocus
{...getInputProps()}
/>
</Search>
</Box>
</motion.div>
<IconButton color="primary" onClick={onClose}>
<CloseIcon />
</IconButton>
</Box>
</Container>

{/* SEARCH RESULTS */}
<BackdropOverlay open={true} onClick={onClose}>
<Container maxWidth="md" disableGutters>
{groupedOptions.length > 0 ? (
<Results>
<List
{...getListboxProps()}
subheader={
<Box paddingX={2}>
<Typography
variant="overline"
color="textSecondary"
gutterBottom>
Popular search results
</Typography>
</Box>
}>
{groupedOptions.map((option, index) => (
<Item
button
key={option.title}
{...getOptionProps({
option,
index
})}>
<Box
display="flex"
justifyContent="space-between"
width="100%">
<Box>
<Typography color="textPrimary">
{option.title}
</Typography>
<Typography variant="caption" color="textSecondary">
{option.type}
</Typography>
</Box>
<Box alignSelf="flex-end">
<Typography variant="caption" color="textSecondary">
/components/button
</Typography>
</Box>
</Box>
</Item>
))}
</List>
</Results>
) : null}
</Container>
</BackdropOverlay>
</React.Fragment>
);
}
这是我存储在 results Prop 中的 API 响应:
0: {id: 1, title: "Button", slug: "button"}
1: {id: 2, title: "Switch", slug: "switch"}
2: {id: 3, title: "Tags", slug: "tags"}
3: {id: 4, title: "Checkbox", slug: "checkbox"}
4: {id: 5, title: "Toast", slug: "toast"}

最佳答案

Autocomplete组件用途 useAutocomplete在引擎盖下 Hook ,因此它们共享相同的 API。在 Autocomplete API .这是onChange的签名:

function(event: object, value: T | T[], reason: string) => void
第二个参数是您在这里需要的选项值。因此,将您的代码更改为:
onChange: (_, option) => router.push(`/components/${option.slug}`)
修复 undefined值(value)问题。

关于reactjs - Material-UI useAutocomplete 无法访问 onChange 中的选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66966009/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com