Size: a a a

2020 March 24

EW

Eugeniy World in БЭМ
По выразительности в jsx вроде тоже все хорошо, насчет compose+composeU согласен, в этом месте есть проблема, чтобы собрать компонент с n-модификаторами, приходится написать чуть больше кода. Но тут скорее от бедности тайпскрипта, не понятно пока как можно статически корректно собрать типы для модификаторов :)
источник

Р

Роман in БЭМ
Мыши плакали…
источник

EW

Eugeniy World in БЭМ
Как вариант — использовать токены, а не строковые значения, тогда будет другого рода контракт
источник

Р

Роман in БЭМ
Бинарные выражения?
источник

EW

Eugeniy World in БЭМ
export const M = 'Button_size_m'
export const S = 'Button_size_S'

import * as Sizes from './size'

<Button size={Sizes.M} />
источник

EW

Eugeniy World in БЭМ
Пока что ts оправдывает этот небольшой оверхед над построением компонента, но я все ещё в поисках лучшего решения
источник

EW

Eugeniy World in БЭМ
Оправдывает в +- среднем проекте, когда идет активная разработка нескольких команд
источник

EW

Eugeniy World in БЭМ
Мы делаем какой-то мажор и нам достаточно запустить тайп-чекинг, чтобы проверить, что мы корректно поправили все свойствва
источник

EW

Eugeniy World in БЭМ
+ можем чуть умннее писать код-моды
источник
2020 March 25

Р

Роман in БЭМ
Eugeniy World
export const M = 'Button_size_m'
export const S = 'Button_size_S'

import * as Sizes from './size'

<Button size={Sizes.M} />
А, так уже делаю, спасибо. В доке об этом тоже, кажется, писали.
источник

EW

Eugeniy World in БЭМ
не уверен) с документацией надо поработать, но чет пока времени совсеем нет
источник

Р

Роман in БЭМ
И пока не решил, что делать с CSS — CRA из коробки не гарантирует порядок классов по порядку импортов (что я ожидал). Придётся тратить время на решение типа reshadow (пока на нём выбор остановился).
источник

Р

Роман in БЭМ
И с той же кнопкой (которая блок Button) — не понятно, как разрулить Button_type_link, потому что Реакт оставляет атрибут type, а у тега <a> он имеет совершенно другую семантику. И поэтому пришлось делать переопределение, но TS ругается и автокомплит не работает.
источник

AZ

Artem Zhukov in БЭМ
Роман
И с той же кнопкой (которая блок Button) — не понятно, как разрулить Button_type_link, потому что Реакт оставляет атрибут type, а у тега <a> он имеет совершенно другую семантику. И поэтому пришлось делать переопределение, но TS ругается и автокомплит не работает.
так ты сам тут передаёшь тип string | undefined | null в пропс type, который скорее всего должен быть юнионом
источник

AZ

Artem Zhukov in БЭМ
ну и тайпскрипт тебе логично написал про конфликт пропса type
источник

AZ

Artem Zhukov in БЭМ
который ты в базовом Button видимо проксируешь в <button>
источник

Р

Роман in БЭМ
Так мне нужно, чтобы в Button был пропс type="link", но чтобы у Button_type_link атрибут (а не пропс) был не link
источник

Р

Роман in БЭМ
Есть способ задать атрибут, чтобы он не думал, что это пропс?
источник

AZ

Artem Zhukov in БЭМ
можно просто не прокидывать type в атрибуты <button> в Button.tsx
источник

AZ

Artem Zhukov in БЭМ
но у тебя ругается не на это, у тебя ругается на 18 строчку, что там тип string ты передаешь
источник