ais*_*439 4 autocomplete reactjs material-ui
您可以在下面找到有关自动完成的 MUI 文档的示例,其中我在选项列表之前传递了一个指向 google 的链接。但是,我无法单击该选项,事件目标只是 MuiAutocomplete,而不是<a>我正在传递的。
import React from "react";
import TextField from "@material-ui/core/TextField";
import Paper from "@material-ui/core/Paper";
import Autocomplete from "@material-ui/lab/Autocomplete";
const Link = ({ children }) => (
<Paper>
<a href="https://www.google.com/" rel="nofollow" target="_blank">
Go to Google
</a>
{children}
</Paper>
);
export default function ComboBox() {
return (
<Autocomplete
id="combo-box-demo"
options={top100Films}
getOptionLabel={option => option.title}
style={{ width: 300 }}
renderInput={params => (
<TextField {...params} label="Combo box" variant="outlined" fullWidth />
)}
PaperComponent={Link}
/>
);
}
Run Code Online (Sandbox Code Playgroud)
https://codesandbox.io/s/material-demo-egi6p
有趣的是,打开自动完成功能
<Autocomplete
open // add this prop
id="combo-box-demo"
options={top100Films}
Run Code Online (Sandbox Code Playgroud)
允许它按预期工作。
目前,我正在使用 onMouseDown 来完成这项工作,但感觉这可能是一个糟糕的解决方案。
您可以通过添加以下内容来解决此问题:
onMouseDown={event => {
event.preventDefault();
}}
Run Code Online (Sandbox Code Playgroud)
到您的链接,以便您的Link组件看起来像:
const Link = ({ children, ...other }) => (
<Paper {...other}>
<a
onMouseDown={event => {
event.preventDefault();
}}
href="https://www.google.com/"
rel="nofollow"
target="_blank"
>
Go to Google
</a>
{children}
</Paper>
);
Run Code Online (Sandbox Code Playgroud)
我包含的一个单独的修复是将任何额外的 props 传递给Paper组件(通过...other)。该Popper组件将 props 传递给Paper控制其定位的组件,因此如果不进行此更改,定位将不正确。
之所以event.preventDefault()有必要,是因为焦点集中在单击之前的输入上。鼠标按下的默认效果之一是将焦点从输入更改为链接。输入的 onBlur将触发列表框部分的关闭,这Autocomplete意味着链接将不再存在,并且不会继续执行onClick链接的行为。调用event.preventDefault()可以防止焦点发生变化。
| 归档时间: |
|
| 查看次数: |
4749 次 |
| 最近记录: |