oleg008

24 октября 2016, Berlin, Germany

# Понедельник 3 твита

Привет всем из Берлина! На этой неделе с вами @oleg008.

14:59

Я разрабатываю библиотеку jss для генерирования стилей на js, поэтому буду развлекать вас своими мыслями на эту и соседние темы.

15:02

А кто здесь собственно пользовался уже любой cssinjs библиотекой?

15:36

# Вторник 30 твитов

@oleg008 @jsunderhood 1. Доступны все переменные из js, не надо дублировать.
8:31
@oleg008 @jsunderhood 2. Можно писать нормальные функции хелперы и не страдать
8:33
@oleg008 @jsunderhood 3. Стили рядом с версткой, не надо переключаться. И можно использовать общий скоуп.
8:33
@oleg008 @jsunderhood 4. Не надо учить новый язык
8:33
@oleg008 @jsunderhood 5. Нет возможности писать вложенный ад )
8:33
@pavelsilin я бы не говорил «богомерзкий CSS» — в CSS-in-JS всё равно есть CSS /cc @kizmarh альтернативное мнение о полезности CSS-in-JS
8:40
@andrey_sitnik @kizmarh количество болей, страданий и +100500 костылей в виде препроцессоров и плагинов к postcss, делают его именно таким.
8:41

Пожалуй надо сказать пару слов по поводу что такое хорошо и что такое плохо)

8:44

Меня часто спрашивают что дает cssinjs чего не дает css. Раньше я давал ссылку на github.com/cssinjs/jss/bl… и говорил как много приимуществ.

8:47

@jsunderhood Но на самом деле незаменимых преимуществ нету до тех пор пока вы не получите задачу где другие подходы вам что-то дают.

8:48

Поэтому всем тем кто задают себе вопрос, нафига это вообще надо, вам ответ: вам не надо.

8:52

Это всегда было фантазией, которую породило наличие отдельных языков под эти три задачи.

9:02

К сожалению веб платформа никогда не предоставила возможности чисто разделять все эти вещи.

9:02

CSS использует селекторы, которые прописаны в html а также использует его структуру.

9:04

Плюс в js мы обычно также используем селекторы чтоб манипулировать DOM.

9:04

Вот и получается хоть еще 10 языков специализированных изобретай, сущности не разделены, ничего хорошего не будет.

9:05

Что делает React + JSS: стили, структура html и логика по манипуляции html кладется рядом. Разделение по языкам игнорируется.

9:06

Зато разделяем все сущности очень четко. Сущность которая отвечает за отображение - один компонент с очень простым интерфейсом.

9:07

Сущность которая отвечает за какую то специфическую логику, назовем ее "бизнес" опять таки отдельный компонент или функции.

9:08

Сущность которая отвечает за работу с сервером, посылает запросы, обрабатывает данные итд - отдельно.

9:08

Вобщем вместо того чтоб плодить языки, мы плодим сущности. И тем самым добиваемся более высокое переиспользование кода.

9:09

Количество необходимых сущностей можно определять гибко, по задаче. Не везде нужен редукс, не везде jss.

9:11
@taujavarob @pavelsilin @jsunderhood @oleg008 Это надо по ситуации смотреть. Иногда в тему и логика входит (фронтэнд же такой разный).
10:30

все так фокусируются на том чтоб тщательно вытереть пыль и натереть до блеска что забывают что это машина у которой совсем другие задачи.

10:37

Все остальное вообще похуй)

10:41

Когда мы можем легко понять код, мы мы можем легко его исправить, выкинуть, заменить итд.

10:42

Это самый важный фактор который делает программы и быстрыми и стабильными.

10:42

я всегда стараюсь по максимуму логики выделить в чистые функции и потом их использовать уже где надо, включая в компонентах.

12:12
. @jsunderhood я использую селекторы в CSS, чтобы манипулировать другими людьми!
14:49
@taujavarob @jsunderhood immutable code это идея, которую я продвигаю btw
14:52

# Среда 13 твитов

И так, поговорим о библиотеках для cssinjs и в часности об альтернативах JSS.

12:13

Вот более менее полный список библиотек github.com/MicheleBertoli…

12:15

Начнем с aphrodite. Я написал как то статью сравнивающую их: medium.com/@oleg008/aphro…

12:18

Что характеризует афродиту: более высокий уровень абстракции, апи пытается дать пользователю инлайн стили которые генерируют CSS в <style>

12:21

Но при ограниченом сабсете CSS который можно использовать: к примеру нету доступа к селекторам тепа ~> итд.

12:22

Далее у афродиты только один режим рендеринга: все стили пишутся в один <style>. В JSS можно и так и так.

12:23

Негативное у афродиты это батчинг - они прежде чем отрендерить стили ждут. Это может дать перерисовку.

12:26

И не дает конечный (computed) результат если делать это синхронно. Тем самым заставляет тебя использовать setTimeout.

12:27

Также некорректно сравнивать jss и aphrodite напрямую, для этого я написал отдельную библиотеку, которая совмещает обе идеи в одной.

12:28

github.com/cssinjs/aphrod…

Эта библиотека дает API практически как у aphrodite но для описания стилей можно использовать весь JSS JSON DSL.

12:28

Также там решена проблема с батчингом и всеми видами селекторов.

12:29
@jsunderhood У меня это давало страшное мигание интерфейса, когда дом показывается без стилей, а затем применяются стили.
15:09
@pavelsilin @jsunderhood у этого явления даже название есть en.m.wikipedia.org/wiki/Flash_of_…
18:16

# Четверг 6 твитов

И так поговорим о библиотеке radium. Кто что может сказать по ней?

9:07

@jsunderhood Вопросы тоже велком

9:07

А это проблема когда есть длинные списки, тк для каждой строки дублируются одинаковые стили.

13:46
@jsunderhood трогал его когда работал с github.com/FormidableLabs… Не понравилось, даже завел issue на какую-то мелочь github.com/FormidableLabs…
14:59

На мой взгляд важная штука отличающая JSS от Radium: весь сгенерированый CSS можно посмотреть как он есть в доме в style тэге.

15:46

Тоесть по сути также как и с чистым CSS.

15:46

# Пятница 16 твитов

Кто нибудь уже пользовался jss-isolate плагином?

11:37

@jsunderhood Мне кажется что никто толком не понял для чего он и почему он очень круто меняет все.

11:38

этот список можно также самому расширять или изменять и тем самым получить глобальные умолчания без использования глобальных стилей

13:42
@iamstarkov, @boriscoder, @jsunderhood, лишь то, что кто-то понимает технологию и умеет ей пользоваться, не делает её хорошей.
15:05

это дает более явный контрол компонента над самим собой.

15:57

возьми любое из наследуемых свойств, представь что оно не прописано на твоей кнопке, и представь твоя кнопка будет в разных родителях

15:58

в любом из родителей она может сломаться в зависимости от того какое наследуемое свойство родитель решил определить.

15:59

это в конфликте с понятием компонент, внутренности которого не должны неявно меняться

15:59

Вот еще о чем хотел поговорить, есть один плагин для jss который очень сильно меняет синтаксис для стилей. github.com/cssinjs/jss-ex…

18:28

@jsunderhood главная особенность в том чтоб свойства которые имеют ряд значений разделенных пробелом не надо больше запоминать.

18:31

а также это позволяет в большинстве случаев использовать числа как значения вместо строк.

18:32

Лично мне кажется этот синтаксис не только приемлемым, а даже лучше чем CSS. 1. легче запомнить 2. легче читать и 3. Никакого дублирования.

18:34

вы знаете что-то обо мне чего не знаю я?))))

19:36

Кто еще что думает по поводу развернутого синтаксиса?

19:43

# Суббота 4 твита

@jsunderhood все меняется, когда ты делаешь виджет, который ни страницу менять не должен, ни сам ломаться. И никаких стайлгайдов нет
9:21
@jsunderhood поэтому всякие штуки, облегчающие изоляцию очень круты, чем больше они будут развиваться, тем лучше
9:21
@jsunderhood Возможно, он мне скоро пригодится.
10:36

Написал статью про "профессиональную деформацию" medium.com/@oleg008/profe…

12:46

# Воскресенье 1 твит

Неделя пролета, скоро меня отсюда выкинут)))

20:39

github.com

other