@bem-react/classname: Support css-modules [RFC]
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Idoneità per principianti
- 35/100
- Tipo di issue
- Funzionalità
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Ferma
- Stack tecnologico
- css, javascript, react
- Ambito
- frontend
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.
Descrizione
Пример использования
Подключаем хелпер и передаем в него название компонента а так же объект со стилями:
// 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 (
<button className={cn()}>
<span className={cn('Text')}>{children}</span>
</button>
)
}
Далее на уровне проекта или эксперимента мы можем переопределить нужные нам стили:
// 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 }
Пример реализации
Используем фабрику для генерации классов, в замыкании храним доопределения для компонента и его элементов (в данной реализации не поддержаны модификаторы и миксы):
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 функции.
- Lingua principale
- TypeScript
- Stelle
- 450
- Fork
- 69
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di bem/bem-react
-
@bem-react/classname: Unclear typing for element-bound class name formattersForse già presa @rrabmig l’ha presa 112 giorni fa. Aperta
Difficoltà 3/5 1-2 giorni Idoneità per principianti 68/100
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
-
@bem-react/classname: Can't add modifier with value === 0Forse già presa @frontstall l’ha presa 932 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 55/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 52/100
-
@bem-react/pack: support relative importsForse di nuovo libera @yarastqt l’ha presa 2100 giorni fa e non c’è nessuna pull request aperta. Apertabug scope: pack
Tutte le issue di bem/bem-react
Issue simili
-
effort:S priority:P2
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
cameri/nostream#811 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
dam-agents/dam#4562 ·
I maintainer di solito rispondono entro 1 giorno
-
bug p3 triaged
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
I maintainer di solito rispondono entro 1 giorno
-
bug javascript P2-medium python release:v3.1
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
adrirubio/claude-deck#546 ·
I maintainer di solito rispondono entro 1 giorno