useCallback的依赖数组是否需要包含默认参数?
问题解答
必须把defaultStartDate和defaultEndDate加入useCallback的依赖数组,原因如下:
- 函数参数的默认值是调用时才会求值的,每次调用
handleDateChange如果没传对应参数,会取当前作用域里的defaultStartDate/defaultEndDate值。 useCallback的核心是缓存函数引用,只有依赖数组里的变量变化时,才会生成新的函数。要是不把这俩变量加进去,当它们的值更新后,handleDateChange还是旧的函数引用,调用时会用旧的默认值,直接导致逻辑不符合预期。- 举个实际场景:假设
defaultStartDate从2024-01-01改成了2024-02-01,但没加进依赖,此时调用handleDateChange()(不传startDate),函数会依旧使用2024-01-01作为默认值,这显然不是你想要的结果。
另外要注意,如果你用ESLint的react-hooks/exhaustive-deps规则,它也会强制要求你把这两个变量加入依赖数组,避免出现这类隐蔽的bug。
内容的提问来源于stack exchange,提问作者Mees
相关产品推荐
相关产品推荐

