【问题标题】:react: memoize a function based on a parameter passed to said function反应:根据传递给所述函数的参数记忆函数
【发布时间】:2022-11-12 19:14:14
【问题描述】:

我正在尝试在 React 组件中使用 lodash's throttle 进行其他调用。这是我目前拥有的:

const requestDetails = useCallback(
    throttle((someId: number) => {
      dispatch(...);
    }, 30000)
, []);

我正在努力使requestDetails(someId) 最多每 30 秒运行一次dispatch,对于每个通过的someId

因此,我需要为每个someId 返回一个不同的throttle 函数。但是,上面的代码不起作用:我认为这是因为只有一个 throttle 函数在幕后创建,因此 throttle 对于所有调用只会每 30 秒运行一次,而不是每 @987654330 @。

谢谢!

【问题讨论】:

    标签: reactjs typescript react-hooks lodash


    【解决方案1】:

    我建议使用useRef 来保持节流功能并调用useEffect 来收听someId 的变化

    const throttleRef = useRef(throttle((someId: number) => {
          dispatch(...);
        }, 30000))
    
    useEffect(() => throttleRef.current(someId), [someId])
    

    【讨论】:

    • 我认为这行不通,因为someId 作为参数传递给requestDetails——TS 抱怨找不到someId
    • 嗯,这是真的,你能试试 mt 更新的方法吗?这可能会帮助你解决这个问题@etnguyen03
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-05
    • 2015-03-20
    • 2013-01-27
    • 2017-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多