bem / bem/bem-react

@bem-react/classname: Support css-modules [RFC]

Aperta
#545 5 commenti 2 reazioni 0 assegnatari Vedi su GitHub
RFC scope: classname
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

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.