bem-site / bem-forum-content-ru

Content BEM forum for Russian speak users
MIT License
56 stars 6 forks source link

Скрестить i-bem и redux #904

Open pavelpower opened 8 years ago

pavelpower commented 8 years ago

К сожалению не разбирал крайний i-bem, может он уже "умеет".

redux - такая штука которая работает с иммутабельным состоянием. В БЭМ модификтор - это состояние, а т.к. в большенстве своем это css, то и состояние модификатора не меняется.

А что если сделать timline как у redux для управления состояниями блоков aka модификаторами? А там и тему с состояниями развить до того, что заполнение данных в форму блока это тоже изменение состояния блока...

tadatuta commented 8 years ago

т.к. в большенстве своем это css, то и состояние модификатора не меняется.

WAT? o_0

Т.к. redux не далеко ушел от flux, то вот https://github.com/bem-contrib/bem-flux/

JiLiZART commented 8 years ago

Можешь написать YM модуль в котором создаешь store, потом просто подключаешь его в любой БЭМ блок, вызываешь dispatch на любое действие, в другом блоке можешь сделать subscribe. Проблема использования redux с i-bem в том, что на изменения состояния надо реагировать самостоятельно. Так же ты можешь дополнить BEMDOM своими методами, или вызывать определенный метод у БЭМ блока, render например, когда происходит изменение состояния, чтобы блок мог как то на это реагировать. Или если рассматривать состояние блока как набор его модификаторов, то это очень ограниченное применение, и думаю redux здесь будет лишний, в том же react состояние это полный набор данных компонента, включая его модификаторы.

Redux наиболее эффективен в местах где очень часто требуется обновлять view часть, как в react, angular, vue, mithril и тд, даже в игровых движках. У всех их есть некое понятие виртуального дерева, благодаря которому они могут точечно обновлять кусочки страницы наиболее эффективным способом. i-bem тоже можно научить этому подключив одну из вышеуказанных библиотек, но тогда выводы напрашиваются сами собой.

awinogradov commented 8 years ago

@JiLiZART я тебя немного расстрою) чтобы научить i-bem этому придется переписать его на 80%. Во-первых, он оперирует с живым домом, а во-вторых, большиство методов, реализованных именно для работы с блоками просто не нужны по причине принципиально другого способа взаимодействия с компонентами. i-bem предполагает постоянное знание о блоках с которыми ты работаешь, весь контроль лежит на плечах разработчика. При работе с redux и виртуальным деревом все не так.

@pavelpower я работаю над имплементацией bemjson в качестве state приложения. Не совсем верно мыслить модификатор как state. Потому что бэм-состояние это именно bemjson. А redux работает с простым объектом. То есть задача такова: необходимо работать над изменением bemjson, чтобы интерфейс перестраивался, используя бэм-шаблоны, bemhtml в частности https://github.com/awinogradov/bem-xjst/pull/1. То что ты имеешь ввиду реализовано в redux-tools и кода там совсем чуть-чуть, там просто подписка на store и вывод в панель текущего состояния из него. В общем я могу подробнее все рассказать:)

pavelpower commented 8 years ago

@awinogradov круто! Собственно идея с оперированием bemjson, согалсен, самое верное направление. Я так понимаю сложность оперирования пока в структуре bemjson?

awinogradov commented 8 years ago

@pavelpower в общем сложность пока только во времени) А в целом нет проблем никаких. Подписываться на поддеревья из bemjson можно худо бедно заюзав https://github.com/reactjs/reselect и https://github.com/dfilatov/jspath ;)