我想知道在React钩子中误认为依赖的eslint规则是否总是正确的。在我的示例中,我有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
的依赖。但是我不明白为什么不将其包含在依赖关系数组中会是一个问题。相反,它甚至可能触发状态更新的无限循环。
答案 0 :(得分:1)
您的useEffect取决于定义的state.realTimeData.calendarIds
,这就是您收到该警告的原因。您正在使用useEffect上下文之外的值。您还用state.realTimeData.calendarIds
覆盖了setState
数据;不知道这是否是故意的。一个简单的解决方法是对条件使用ref,因此您可以依靠不引起无限循环。