【问题标题】:React do default parameters need to be in useCallback dependency array?React 默认参数需要在 useCallback 依赖数组中吗?
【发布时间】:2023-01-16 17:46:31
【问题描述】:
标题已经足够解释了,下面是这种情况的一个例子:
const handleDateChange = useCallback((startDate = defaultStartDate, endDate = defaultEndDate) => {
// Do something
}, [defaultStartDate, defaultEndDate]);
defaultStartDate 和 defaultEndDate 是否需要包含在依赖项数组中(如我的示例)?
【问题讨论】:
标签:
javascript
reactjs
react-hooks
【解决方案1】:
是的,因为它们被函数引用,所以当值更改时,不能重用引用旧值的函数的先前版本。这就像在函数体中使用那些变量一样。
你的handleDateChange是有效地¹ 与此相同,这使得为什么您需要依赖项数组中的这些默认值变得更加明显:
const handleDateChange = useCallback(
(startDate, endDate) => {
if (startDate === undefined) {
startDate = defaultStartDate;
}
if (endDate === undefined) {
endDate = defaultEndDate;
}
// Do something
},
[defaultStartDate, defaultEndDate]
);
¹“有效”——有一个非常小的区别:使用默认参数值的函数的 length 属性是 0,而在我的重写中是 2。除此之外,它们的工作方式相同。