- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将 material-ui useAutocomplete
与异步调用一起使用。autocomplete
工作的简单情况,但我需要调整输入聚焦时显示的对话框,所以我必须使用 useAutocomplete
。
所以我尝试合并这段代码(异步):https://codesandbox.io/s/pvjgx
用这个(useAutocomplete):https://codesandbox.io/s/261pd?file=/demo.js
问题是我不知道在哪里或如何将 onChange
放到我的输入中,这样我就可以触发获取数据的异步函数
这是我到目前为止得到的无效代码(无效沙箱)https://codesandbox.io/s/material-demo-gl9pw?file=/demo.js
import React from "react";
import useAutocomplete from "@material-ui/lab/useAutocomplete";
import { InputBase } from "@material-ui/core";
import CircularProgress from "@material-ui/core/CircularProgress";
import styled from "styled-components";
import { makeStyles } from "@material-ui/core/styles";
const Listbox = styled("ul")`
width: 300px; margin: 2px 0 0;padding: 0;position: absolute; list-style: none; background-color: #fff;overflow: auto;max-height: 250px; border-radius: 4px; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); z-index: 1;
& li {padding: 5px 12px; display: flex; & span {flex-grow: 1; }& svg { color: transparent; } }
& li[aria-selected="true"] { background-color: #fafafa; font-weight: 600; & svg {color: #1890ff;}}
& li[data-focus="true"] {background-color: #e6f7ff; cursor: pointer; & svg { color: #000; } }
`;
const useStyles = makeStyles(theme => ({
autoWidth: {width: "auto"},
input: {
marginLeft: theme.spacing(1),
flex: 1,
color: "white",
textAlign: "center",
align: "center",
"& input": {
textAlign: "center"
}
},
iconButton: {
padding: 10,
color: "white"
},
searchRoot: {
display: "flex",
alignItems: "center",
justifyContent: "center",
backgroundColor: "blue"
}
}));
export default function MyAutocomplete() {
const classes = useStyles();
const [value, setValue] = React.useState("");
const [open, setOpen] = React.useState(false);
const [options, setOptions] = React.useState([]);
const loading = open && options.length === 0;
React.useEffect(() => {
let active = true;
if (!loading) { return undefined; }
console.log("run")(async () => {
const response = await fetch("https://country.register.gov.uk/records.json?page-size=5000");
const countries = await response.json();
if (active) {
setOptions(Object.keys(countries).map(key => countries[key].item[0]));
}
})();
return () => {
active = false;
};
}, [loading]);
React.useEffect(() => {
if (!open) {
setOptions([]);
}
}, [open]);
const {
getRootProps, getInputLabelProps, getInputProps, getListboxProps, getOptionProps, groupedOptions, focused, setAnchorEl
// value
} = useAutocomplete({
id: "customized-autocomplete-async",
options: options,
getOptionLabel: option => option.name
});
return (
<div className={classes.autoWidth}>
<div {...getRootProps()}>
<InputBase
{...getInputProps()}
//value={value}
//onChange={event => {setValue(event.target.value); }}
inputRef={setAnchorEl}
className={classes.input}
placeholder="Localisation"
inputProps={{ "aria-label": "Localisation" }}
fullWidth={true}
endAdornment={
<React.Fragment>
{loading ? <CircularProgress color="inherit" size={20} /> : null}
</React.Fragment>
}
/>
</div>
{focused && (
<div className={classes.autoWidth}>
<Listbox {...getListboxProps()}>
<div> Localiser moi ! </div>
<br />
{groupedOptions.map((option, index) => (
<li {...getOptionProps({ option, index })}>
<span>{option.title}</span>
</li>
))}
</Listbox>
</div>
)}
</div>
);
}
欢迎任何提示
最佳答案
你在你的问题中复制了同一个链接两次,所以我真的不知道你想要实现什么。我正在使用带有 TextField 输入的自动完成功能:
<Autocomplete
options={ isValidating ? [{nickname: '...loading'}] : data ? data : [] }
getOptionLabel={(option) => option.nickname}
id="auto-complete"
autoComplete
includeInputInList
value={value}
onChange={(event, newValue) => {
setValue(newValue);
}}
onInputChange={(event, newInputValue) => {
console.log(newInputValue);
}}
renderInput={(params) => <TextField {...params} error={error} helperText={error} label="Email Address or User ID" value={query} onChange={handleChange} margin="normal" />}
/>
并使用Swr拉取数据:
const [query, setQuery] = React.useState('');
const [value, setValue] = React.useState()
const [loading, setLoading] = React.useState(false)
const { data, isValidating } = useSwr(active && query.length > 2 ? '/api/getusers?q='+query : '', fetcher)
const handleChange = (event) => {
setQuery(event.target.value);
};
一切都在异步运行。
也许试着进一步澄清你的问题,这样我就可以改进我的答案:)
关于material-ui 异步自动完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62394822/
从 Redis 获取消息时,onDone:(){print('done')} 从未起作用。 import 'package:dartis/dartis.dart' as redis show PubS
昨天我玩了一些vim脚本,并设法通过循环来对当前输入的内容进行状态栏预测(请参见屏幕截图(灰色+黄色栏))。 问题是,我不记得我是怎么得到的,也找不到我用于该vim魔术的代码片段(我记得它很简单):它
我尝试加载 bash_completion在我的 bash (3.2.25) 中,它不起作用。没有消息等。我在我的 .bashrc 中使用了以下内容 if [ -f ~/.bash_completio
我正在尝试构建一个 bash 完成例程,它将建议命令行标志和合适的标志值。例如在下面 fstcompose 命令我想比赛套路先建议 compose_filter= 标志,然后建议来自 [alt_seq
当我尝试在重定向符号后完成路径时,bash 完成的行为就好像它仍在尝试在重定向之前完成命令的参数一样。 例如: dpkg -l > /med标签 通过在 /med 之后点击 Tab我希望它完成通往 /
我的类中有几个 CAKeyframeAnimation 对象。 他们都以 self 为代表。 在我的animationDidStop函数中,我如何知道调用来自哪里? 是否有任何变量可以传递给 CAKe
我有一个带有 NSDateFormatter 的 NSTextField。格式化程序接受“mm/dd/yy”。 可以自动补全日期吗?因此,用户可以输入“mm”,格式化程序将完成当前月份和年份。 最佳答
有一个解决方案可以使用以下方法完成 NSTextField : - (NSArray *)control:(NSControl *)control textView:(NSTextView *)tex
我正在阅读 Passport 的文档,我注意到 serialize()和 deserialize() done()被调用而不被返回。 但是,当使用 passport.use() 设置新策略时在回调函数
在 ubuntu 11.10 上的 Firefox 8.0 中,尽管 img.complete 为 false,但仍会调用 onload 函数 draw。我设法用 setTimeout hack 解决
假设我有两个与两个并行执行的计算相对应的 future 。我如何等到第一个 future 准备好?理想情况下,我正在寻找类似于Python asyncio's wait且参数为return_when=
我正在寻找一种 Java 7 数据结构,其行为类似于 java.util.Queue,并且还具有“最终项目已被删除”的概念。 例如,应可以表达如下概念: while(!endingQueue.isFi
这是一个简单的问题。 if ($('.dataTablePageList')) { 我想做的是执行一个 if 语句,该语句表示如果具有 dataTablesPageList 类的对象也具有 menu
我用replaceWith批量替换了许多div中的html。替换后,我使用 jTruncate 来截断文本。然而它不起作用,因为在执行时,replaceWith 还没有完成。 我尝试了回调技巧 ( H
有没有办法调用 javascript 表单 submit() 函数或 JQuery $.submit() 函数并确保它完成提交过程?具体来说,在一个表单中,我试图在一个 IFrame 中提交一个表单。
我有以下方法: function animatePortfolio(fadeElement) { fadeElement.children('article').each(function(i
我刚刚开始使用 AndEngine, 我正在像这样移动 Sprite : if(pValueY < 0 && !jumping) { jumping =
我正在使用 asynctask 来执行冗长的操作,例如数据库读取。我想开始一个新 Activity 并在所有异步任务完成后呈现其内容。实现这一目标的最佳方法是什么? 我知道 onPostExecute
我有一个脚本需要命令名称和该命令的参数作为参数。 所以我想编写一个完成函数来完成命令的名称并完成该命令的参数。 所以我可以这样完成命令的名称 if [[ "$COMP_CWORD" == 1 ]];
我的应用程序有一个相当奇怪的行为。我在 BOOT_COMPLETE 之后启动我的应用程序,因此在我启动设备后它是可见的。 GUI 响应迅速,一切正常,直到我调用 finish(),按下按钮时,什么都没
我是一名优秀的程序员,十分优秀!