我正在学习一个React钩子教程,我不明白为什么函数表达式(顶部timerId中的useEffect )会被自动调用,但是底部useEffect中的函数表达式search需要调用它才能调用它?
useEffect(() => {
const timerId = setTimeout(() => {
setDebouncedTerm(term);
}, 1500);
return () => {
clearTimeout(timerId);
};
}, [term]);
useEffect (() => {
const search = async() => {
const { data } = await axios.get('https://en.wikipedia.org/w/api.php', {
params: {
action: 'query',
list: 'search',
origin: '*',
format: 'json',
srsearch: debouncedTerm
}
});
setResults(data.query.search);
};
search();
}, [debouncedTerm]);发布于 2021-01-31 21:22:29
它将一个函数分配给需要手动调用的search变量。
但是,在其他useEffect的主体中,它调用setTimeout函数并将setTimeout函数的返回值分配给timerId变量。setTimeout函数的返回值是一个正整数,它是超时的唯一标识符。
因此,timerId的值并不是一个函数。这是超时的id。
只有在top useEffect主体中调用的函数才是setTimeout函数。
https://stackoverflow.com/questions/65984020
复制相似问题