Open pavelpower opened 8 years ago
т.к. в большенстве своем это css, то и состояние модификатора не меняется.
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 ;)
К сожалению не разбирал крайний i-bem, может он уже "умеет".
redux - такая штука которая работает с иммутабельным состоянием. В БЭМ модификтор - это состояние, а т.к. в большенстве своем это css, то и состояние модификатора не меняется.
А что если сделать timline как у redux для управления состояниями блоков aka модификаторами? А там и тему с состояниями развить до того, что заполнение данных в форму блока это тоже изменение состояния блока...