Проблема в том, что этот подход убивает оптимизацию пакета и включает все файлы из docs/app/Recipes/
в пакет, даже если они не используются.
Лучший способ написать это - использовать <React.Suspense>
и React.lazy
:
const Recipe = React.lazy(() =>
import(`docs/app/Recipes/${props.componentName}`)
.catch(() => ({ default: () => <div>Not found</div> }))
);
Что используется как:
<React.Suspense fallback={'loading...'}><Recipe/></React.Suspense>
Более чистый способ сделать это и избежать ошибки линтера - создать карту возможных компонентов:
import Foo from 'docs/app/Recipes/Foo';
import Bar from 'docs/app/Recipes/Bar';
...
const componentsMap = { Foo, Bar };
...
const Recipe = componentsMap[props.componentName] || () => <div>Not found</div>;
В этом случае props.componentName
может быть проверено при необходимости.