【发布时间】:2022-08-11 19:25:19
【问题描述】:
我第一次尝试应用 lodash 油门。
我知道必须在 useCallback 内应用油门,否则每次重新渲染都会调用它(在我的情况下,每次用户搜索的新按键都将调用它)。
我拥有的代码是有效的,并且逻辑似乎很有意义 - 但是没有应用油门,因此每次击键都会进行 api 调用。
关于我的逻辑在哪里失败的任何指示?
import {
useEffect,
useCallback
} from \'react\';
import { throttle } from \'lodash\';
import { getAllUsers } from \'../../../api/api\';
import { USER_ROLE } from \'../../../types/types\'
interface IProps extends Omit<unknown, \'children\'> {
search?: string;
}
const DemoFanManagementTable = ({ search }: IProps): JSX.Element => {
const getFans = (search?: string) => {
console.log(\"getFans ran\")
const fans = getAllUsers({ search }, USER_ROLE.FAN);
//logs a promise
console.log(\"logging fans \", fans)
return fans;
}
//throttledSearch is running every time search changes
const throttledSearch = useCallback((search?: string) => {
console.log(\"throttledSearch ran\")
return throttle(
//throttle is not throttling, functions run every keystroke
() => {
getFans(search), 10000, { leading: true, trailing: true }
}
)
}, [search])
//useEffect is running every time search changes
useEffect(() => {
return throttledSearch(search)
}, [search]);
return (
<div>
{search}
</div>
);
};
export default DemoFanManagementTable;
标签: javascript reactjs typescript lodash throttling