@bem-react/classname: Support css-modules [RFC]
- Lingua principale
- TypeScript
- Stelle
- 450
- Fork
- 69
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Descrizione
## Пример использования
Подключаем хелпер и передаем в него название компонента а так же объект со стилями:
```js
// src/components/Button/Button.js
import React from 'react'
import { createCn } from '@bem-react/classname'
import styles from './Button.module.css'
export const { merge, cn } = createCn('Button', styles)
export const Button = ({ children }) => {
return (
{children}
)
}
```
Далее на уровне проекта или эксперимента мы можем переопределить нужные нам стили:
```js
// src/experiments/Button/Button.js
import { merge, cn, Button } from '../../components/Button/Button'
import styles from './Button.module.css'
merge(styles)
export { merge, cn, Button }
```
## Пример реализации
Используем фабрику для генерации классов, в замыкании храним доопределения для компонента и его элементов (в данной реализации не поддержаны модификаторы и миксы):
```js
export function createCn(component, styles) {
const styleOverrides = []
return {
merge(overrides) {
styleOverrides.push(overrides)
},
cn(element) {
const target = element ? `${component}-${element}` : component
const className = [styles]
.concat(styleOverrides)
.map(shape => shape[target])
.join(' ')
return className
}
};
}
```
В таком кейсе нам не нужно будет докидывать микс на элементы снаружи, т.к. вся логика будет инкапсулирована внутри `merge` функции.
Guida per i contributori
Apri la guida per i contributori
Direzione di ricerca
Inizia con il package @bem-react/classname e segui l’entry point createCn descritto nell’issue. Confronta l’utilizzo proposto di Button.js e Button.module.css con il comportamento attuale, quindi verifica che le sovrascritture degli stili funzionino per il componente e i suoi elementi come mostrato.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- css, javascript, react
- Ambito
- frontend
- Tipo di issue
- Funzionalità
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 35/100