我有一个自动完成组件,默认情况下,它没有数据显示。当用户键入某个内容时,它将动态加载数据。但我希望在用户停止键入时执行此操作,而不是每次都快速输入内容。所以我等待1500毫秒,然后检查字符串是否已更改。但是代码没有按照我预期的方式工作。
const dispatch = useDispatch();
const [searchStr, setSearchStr] = useState(null);
function handleChange(event) {
const str = event.target.value.toLowerCase();
if (str.length < 2) return;
setSearchStr(str);
setTimeout(() => {
// str never equals searchStr
console.log(str, searchStr)
if(str === searchStr) {
dispatch(doSearch(searchStr));
}
}, 1500);
}
代码中有两个问题。
1-setState
是异步运行的,因此setSearchStr
不会立即更改searchStr
2每次输入更改时,都会创建一个新的setTimeout,因此在从第一个字符输入开始的1500ms之后,它将失去其效果。你要做的事情叫做去平衡。解决方案是在创建一个新的之前清除之前的setTimeout
s:
let timer; // =========> HERE
function MyComponent() {
const dispatch = useDispatch();
const [searchStr, setSearchStr] = useState(null);
function handleChange(event) {
const str = event.target.value.toLowerCase();
if (str.length < 2) return;
setSearchStr(str);
clearTimeout(timer); // =========> HERE
timer = setTimeout(() => {
dispatch(doSearch(str));
}, 1500);
}
}
如果您坚持将搜索值保存在有状态变量中,您可以使用use效应:
let timer; // =========> HERE
function MyComponent() {
const dispatch = useDispatch();
const [searchStr, setSearchStr] = useState(null);
function handleChange(event) {
const str = event.target.value.toLowerCase();
setSearchStr(str);
}
useEffect(() => {
if (searchStr.length < 2) return;
clearTimeout(timer);
timer = setTimeout(() => {
dispatch(doSearch(searchStr));
}, 1500);
}, [searchStr])
}
我最近用python和Selenium做了一个webscraper,我发现做起来非常简单。页面使用ajax调用加载数据,最初我等待一个固定的time_out加载页面。有一段时间奏效了。之后,我发现selenium有一个内置函数WebDriverWait,它可以使用wait.until()等待特定元素的加载。这使我的webscraper运行得更快。 问题是,我对结果还是不满意。我下载内容平均每页花了
我试图在新选项卡中打开站点,代码:
我正在尝试使用selenium/python从印度中央污染控制委员会读取数据表。这是一个输出示例。我基本上遵循此处介绍的方法:https://github.com/RachitKamdar/Python-Scraper. 多亏了@Prophet,我才能够从第一页读取数据(使用Python的XPATH选择元素?)但我无法让selenium在切换到第2页时等待数据表重新加载。我试图添加webdrive
我试图创建一个等待加载页面的方法,但我出现了一个错误。可能我没有正确使用这个方法。 错误是:
问题内容: 我正在构建一个访问angular / python RESTful API的Angular前端。 我正在使用AngularJS v1.2.16。 出于某种原因,在加载REST资源之前需要花费大量的时间,而大多数时间只是在等待。据我了解,“等待”正在衡量到第一个字节的时间- 我的所有服务都在本地运行(前端,API和数据库)。 鉴于所有服务都在本地运行,我不知如何调试它。有人在哪里找什么提
由于我正在使用的网站的随机加载时间,我必须等待某些html元素出现才能使用它们。我利用了时间。用于测试目的的sleep命令,但现在要优化所有内容。我尝试过各种来自网络的明确的等待建议,但它们在某个点上都发生了冲突。 下面是一个代码示例: 提前谢谢各位!