- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我不知道我做错了什么,但我无法访问 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/
我正在使用 Material UI 组件开发 React JS 应用程序。在我的应用程序中,我没有使用 redux。 一切正常。但是当我尝试实现 Material ui 自动完成时,它在 webpac
我不知道我做错了什么,但我无法访问 option.slug从我从 API 收到的对象。我正在尝试更改传递 URL slug 并更改我的应用程序的路由。我正在尝试使用 onChange 来做到这一点 P
我是一名优秀的程序员,十分优秀!