К сожалению не разбирал крайний i-bem, может он уже "умеет".
redux - такая штука которая работает с иммутабельным состоянием. В БЭМ модификтор - это состояние, а т.к. в большенстве своем это css, то и состояние модификатора не меняется.
А что если сделать timline как у redux для управления состояниями блоков aka модификаторами? А там и тему с состояниями развить до того, что заполнение данных в форму блока это тоже изменение состояния блока...
WAT? o_0
Т.к. redux не далеко ушел от flux, то вот https://github.com/bem-contrib/bem-flux/
Можешь написать YM модуль в котором создаешь
store, потом просто подключаешь его в любой БЭМ блок, вызываешьdispatchна любое действие, в другом блоке можешь сделатьsubscribe. Проблема использованияreduxсi-bemв том, что на изменения состояния надо реагировать самостоятельно. Так же ты можешь дополнить BEMDOM своими методами, или вызывать определенный метод у БЭМ блока, render например, когда происходит изменение состояния, чтобы блок мог как то на это реагировать. Или если рассматривать состояние блока как набор его модификаторов, то это очень ограниченное применение, и думаю redux здесь будет лишний, в том жеreactсостояние это полный набор данных компонента, включая его модификаторы.Redux наиболее эффективен в местах где очень часто требуется обновлять
viewчасть, как в react, angular, vue, mithril и тд, даже в игровых движках. У всех их есть некое понятие виртуального дерева, благодаря которому они могут точечно обновлять кусочки страницы наиболее эффективным способом.i-bemтоже можно научить этому подключив одну из вышеуказанных библиотек, но тогда выводы напрашиваются сами собой.@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и вывод в панель текущего состояния из него. В общем я могу подробнее все рассказать:)@awinogradov круто! Собственно идея с оперированием bemjson, согалсен, самое верное направление. Я так понимаю сложность оперирования пока в структуре bemjson?
@pavelpower в общем сложность пока только во времени) А в целом нет проблем никаких. Подписываться на поддеревья из
bemjsonможно худо бедно заюзав https://github.com/reactjs/reselect и https://github.com/dfilatov/jspath ;)