Если вы хотите, чтобы кто-то использовал ваш компонент или библиотеку компонентов, вам следует больше думать о «подпорках», а не о классах CSS для настройки стиля.
Если вам нужно, чтобы пользователи вашего виджета могли полностью манипулировать стилем вашего компонента, у вас есть много опций, без предварительной записи classNames на всех ваших элементах.
Самое распространенное, что я нашел, это чтобы ваш компонент получал свойство altClass
или className
, а затем использовал его внутри оболочки вашего компонента. Таким образом, пользователи могут сами назначать класс для управления стилями.
Это свойство может быть даже объектом, который содержит набор ключей / значений css, которые вы можете применить таким же образом, но ко многим элементам в вашем компоненте.
Надеюсь, это ответит на ваш вопрос.
Если вам нужно вдохновение, вам следует проверить некоторые библиотеки UI с открытым исходным кодом, такие как Material UI или Ant Design , они прекрасно справляются с такими сценариями.
Давайте отложим Реакт на секунду.
Представьте, что у вас есть функция, которая получает два аргумента: id
и className
.
id от элемента на вашей странице пользователя
ClassName - это строка, соответствующая классу, который будет использоваться для настройки вещей.
webpack.config.js
var path = require('path');
module.exports = {
entry: './src/index.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'colorme.js',
library: 'colorme'
}
};
index.js
export function addThings(id, className) {
document.getElementById(id)
.innerHTML = (
'<div class="'+ className +'">Testing things</div>'
)
}
Эта функция addThings
будет вставлять в ваш элемент (из id
) div с настраиваемым className
.
Затем на странице вашего пользователя:
<html>
<head>
<style>
.asd {
background-color: red;
}
.awd {
background-color: blue;
}
</style>
</head>
<body>
<div id="test"></div>
<script type="text/javascript" src="./colorme.js"></script>
<script>
window.colorme.addThings('test', 'asd')
// window.colorme.addThings('test', 'awd')
// ...
</script>
</body>
</html>
Вы увидите, что добавлен div "Testing things" с классом "asd" или "awd" соответственно. И теперь ваши пользователи могут контролировать, как выглядит этот div.
Если это работает для вас, читайте больше здесь: https://webpack.js.org/guides/author-libraries/
Если передача параметров имеет большое значение, вы можете использовать атрибуты data- *, например, так:
<style>
.asd {
background-color: red;
}
.awd {
background-color: blue;
}
</style>
<div data-root_class="asd" data-some_other_class="lala" id="test"></div>
<script type="text/javascript" src="./colorme.js"></script>
<script> colorme.init('test') </script>