我正在创建一个网站,用户可以在其中输入搜索栏。
最初,我对onChange
是用户搜索后面的一个字符的事实有疑问。例如,如果用户搜索“香蕉”,则搜索为“香蕉”。
我了解到问题出在setState
是异步的。
onChange is one character on delay - Hooks
为避免此问题,我在代码中引入了useEffect
组件。有用。
但是,现在,如果用户键入某些单词,那么他键入的单词不会立即显示在搜索栏中。稍后显示它们,好像在用户键入内容和显示内容之间存在延迟。
我的搜索栏组件
export default function SearchBar({handlerSearchBar}) {
const classes = useStyles();
const [searchBarQuery, setSearchBarQuery] = React.useState([""])
function handleChange(event) {
setSearchBarQuery(event.target.value);
console.log(searchBarQuery)
}
useEffect(() => {
console.log("Search message inside useEffect: ", searchBarQuery);
handlerSearchBar(searchBarQuery)
});
return (
<form className={classes.container} noValidate autoComplete="off">
<TextField
required
id="standard-full-width"
label="Searchbar"
style={{ marginLeft: 40, marginRight: 40 }}
placeholder="Write your query"
// helperText="The results will appear below!"
fullWidth
margin="normal"
InputLabelProps={{
shrink: true,
}}
onChange={handleChange}
/>
</form>
);
}
handlerSearchBar函数
该函数会将结果从我的搜索栏组件传递到其父代,然后传递给其祖父母(
SearchForm
)。祖父母
SearchForm
将其状态之一设置为通过搜索栏handlerSearchBar
函数传递的状态:function SearchForm() {
const [searchBarQueryParent, setSearchBarQueryParent] = React.useState([""])
function handlerSearchBar(searchBarQuery) {
setSearchBarQueryParent(searchBarQuery)
console.log(searchBarQuery)
}
return (something)
}
我的问题是:为什么搜索词的显示比实际键入的词延迟这么多?
我认为正在发生的事情是每个击键都调用
useEffect
,这是如此之慢。我尝试在
useEffect
上调用onSubmit
,但没有任何改善。还是我的
handlerSearchBar
函数使一切变慢 最佳答案
我通过从onChange
更改为onBlur
来解决它。
我不完全确定更改为何有效,但确实有效,
关于javascript - useEffect使onChange并键入延迟/缓慢,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58903243/