Вариант 1: Импортировать все известные вам модули стилей, которые вы будете использовать
Создайте карту импортированных объектов "стиля", которые будут введены с помощью id
s, переданных в двигательный Просто нужно убедиться, что все объекты "style" имеют все одинаковые свойства CSS, такие как "alert", и, конечно, использовать защитный шаблон на пути объекта к параметру id
, чтобы не было доступа "undefined of".
import styles1 from "....";
import styles2 from "....";
...
const stylesMap = {
style1Id: styles1,
style2Id: styles2,
...
};
...
className={stylesMap[this.props.match.params.id].alert}
Плюсы: фронтальная загрузка всех необходимых вам CSS модулей и, вероятно, их немного проще обдумать и отладить
Минусы: использует больше ресурсов
Опция 2: Использовать динамический c импорт
Создать функцию asyn c для «извлечения» необходимого модуля CSS и использовать функцию жизненного цикла компонента или ловушку эффекта для обновления ссылки на объект стиля.
const loadStyle = async (...params) => {
try {
const styleObject = await import(...path and module name from params);
// setState or useState setter to set style object
} catch {
// set a fallback style object
}
}
...
componentDidMount() {
// check props.match.params.id
// gather up other CSS module path details
// trigger dynamic CSS module load
loadStyle(... CSS module path detials);
}
**OR**
useEffect(() => {
// check props.match.params.id
// gather up other CSS module path details
// trigger dynamic CSS module load
loadStyle(... CSS module path detials);
}, [props.match.params.id, ...any other dependencies]);
...
className={stylesMap[<this.>state.styleObject].alert}
Плюсы: меньший размер / меньшее использование ресурсов.
Минусы: возможно, большая задержка при рендеринге, поскольку ресурсы не выбираются раньше времени.
Примечание : Также все зависит от использования вашего приложения, потребностей и требований. Например, если это связанное приложение (например, cordova / phonegap, Electron и т. Д. c), то разумнее будет включить все необходимые ресурсы.