我想知道React钩子中错误设置依赖关系的esint规则是否总是正确的。在我的示例中,calendarIds
对象处于状态。当查询是current-day
时,我将calendarIds
对象初始化为一些数据。如果页面查询参数从curent-day
更改为其他内容,我想重置calendarIds
对象:
const {calendarData, query} = props
useEffect(() => {
console.log('useeffect2');
if (query['date-range'] === 'current-day') {
const [currentDay = { events: [] }] = calendarData;
const events = currentDay.events.reduce((acc, { calendarId, actual, trend }) => {
acc[calendarId] = { actual: actual || Math.round(Math.random() * 1000),
trend };
return acc;
}, {});
console.log(CALENDAR_IDS, 'events', events);
setState({
type: CALENDAR_IDS,
payload: events
});
} else if (state.realTimeData.calendarIds) {
setState({
type: CALENDAR_IDS,
payload: {}
});
}
}, [calendarData, query]);
依赖数组包括触发函数的calendarData
和query
。在else if
中,我检查calendarIds
是否已经处于状态,如果是,我将其重置。
因此,我得到了一个丢失的state.realTimeData.calendarIds
依赖项。然而,我不明白为什么不将其包含在依赖项数组中会出现问题。相反,它甚至可能触发状态更新的无限循环。
您的useEffect取决于定义的state.realTimeData.calendarIds
,这就是您收到该警告的原因。您正在使用useEffect上下文之外的值。您还将使用setState
覆盖state.realTimeData.calendarIds
数据;不确定这是否是故意的。一个简单的解决方案是对条件使用ref,这样就可以依赖于不引起无限循环。