Проблема:
с использованием асинхронной задачи в обратном вызове, например:
const asyncTask = useCallback(async (data) => {
dispatch({ type: 'FETCH' })
try {
const res = await MyService.asyncMethod(data)
dispatch({ type: 'SUCCESS', data: res })
} catch (e) {
dispatch({ type: 'ERROR' }) // This dispatch throw this error in jest
}
}, [])
Когда компонент размонтируется до разрешения MyService.asyncMethod
, он вызывает dispatch
, пытаясь изменитьсостояние не смонтированного компонента.
Возможно, в реальном мире это просто предупреждение, а не ошибка.Однако, использование jest
вызывает эту ошибку:
TypeError: Cannot read property 'body' of null
Эта функция использует внутри dispatch
реакции (useReducer):
https://github.com/facebook/react/blob/b87aabdfe1b7461e7331abb3601d9e6bb27544bc/packages/react-dom/src/client/getActiveElement.js
Как безопасно выполнить диспетчер в асинхронных задачах?