В нашем проекте у нас есть около 10 анимаций, которые используют библиотеку react-lottie и загружаются библиотекой загружаемых компонентов. Некоторые из этих анимаций дают сбой в среде разработки Gatsby. Мне удалось сузить круг вопросов, которые не работают с моей стороны, и их было 2.
Компонент построен так:
@LottieComponent.tsx
import React, { CSSProperties } from 'react';
import Lottie from 'lottie-react';
import json from './lottieAnimation.json';
interface Props {
styles?: CSSProperties;
}
export default ({ styles }: Props) => (
<Lottie style={styles} animationData={json} />
);
Затем мы используем разделение кода:
@index.tsx
import loadable from '@loadable/component';
const ExchangeInfographic = loadable(
() => import('./animationComponents/ExchangeGraphic')
);
export {
ExchangeInfographic
};
Затем мы импортируем компонент в модуль следующим образом:
import { ExchangeInfographic } from '../../components/Infographic';
const ExampleComponent = () => {
const [animationWasRendered, setAnimationWasRendered] = useState(false);
return (
<ReactVisibilitySensor
onChange={(isVisible) => {
isVisible && setAnimationWasRendered(true);
}}
partialVisibility
>
<SectionCustomComponent>
<Container>
<Col>
{animationWasRendered ? <ExchangeInfographic /> : <></>}
</Col>
</Row>
</Container>
</Section>
</ReactVisibilitySensor>
);
};
export default ExampleComponent;
Ошибка, которую я получаю в консоли:
react-dom.development.js:23966 Uncaught Error: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: object.
Check the render method of `InnerLoadable`.
Я проверил возможные причины этого сообщения об ошибке и нашел эту ветку: https://github.com/facebook/react/issues/13445 и разделение кода / проблема с загрузкой реакции а>
но не похоже, что динамический импорт завершится ошибкой. Непонятная часть заключается в том, почему он вылетает только на некоторых анимациях, а другие работают нормально каждый раз. О.о
Не могли бы вы понять, что мне не хватает?
Спасибо за любые предложения!