Почему деревья стоят на месте сказка

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

«Икеа» претендует на статус мирового лидера в области устойчивого развития. Но Aftonbladet удалось выяснить, что субподрядчик шведского мебельного гиганта уничтожает здоровые деревья, регистрируя их как больные или погибшие.

Великий Бычков, Украина

Из недр нетронутого леса доносится оглушительный треск. Вековой бук падает, увлекая за собой все на своем пути, и обрушивается с крутого склона. Дерево срубили незаконно — и скоро из него могут сделать икеевский стул, как выяснила Aftonbladet.

Последняя суббота ноября. Начинается рождественский сезон в торговом центре Kungens Kurva недалеко от Стокгольма. Покупатели с грохотом выкатывают тележки из некогда крупнейшего магазина «Икеа» в мире. Но нынешней осенью его обошел по размерам торговый комплекс в филиппинской Маниле.

Деревянную мебель в плоских упаковках загружают в багажники автомобилей или складывают на тележки — точно так же, как и в любом другом из более 400 магазинов «Икеа» по всему миру.

Многие поколения шведов обставляли свои дома мебелью из «Икеа». Эта компания с ее узнаваемым дизайном и доступными ценами занимает особое место в сердцах множества людей. А в магазине, украшенном к Рождеству, покупателей убеждают: мебель, которую они приобретают, не просто недорогая, но еще и произведена со всей ответственностью. А шведская компания на каждом этапе своей деятельности привержена стратегии устойчивого развития.

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

В Карпатах, на самой границе между Украиной и Румынией, еще сохранились последние реликтовые леса Европы, где свободно разгуливают медведи, волки и рыси.

Эти леса еще называют «легкими Европы». Они играют критически важную роль как в деле сохранения биологического многообразия, так и в борьбе с худшими последствиями изменений климата.

Но они становятся объектом все более наглых посягательств.

Виновником уничтожения лесов Амазонии стало животноводство. В Южной Азии — плантации для производства пальмового масла. А в Европе во всем виноват спрос на древесину.

По данным спутникового анализа Всемирного лесного дозора, в прошлом году, в самый разгар коронавирусного кризиса, Украина потеряла около 80 тысяч гектаров леса. Прирост на 76% по сравнению с предыдущим годом.

В своем ответе на запрос об устойчивом развитии «Икеа» заверяла, что придерживается принципа нулевой толерантности к незаконной вырубке деревьев. Однако в июне 2020 года британская экологическая организация Earthsight заявила, что субподрядчик «Икеа» на Украине допускает нарушения. Лесозаготовительную компанию обвинили в рубке деревьев в так называемый период тишины — весной, когда у многих животных рождается потомство. Закон требует защитить лес от подобных посягательств.

«Икеа» отвергла все обвинения, указав на неоднозначную трактовку законов, и заявила, что ее подрядчики ничего не нарушали. Дело ограничилось парой новостных заметок в шведских СМИ.

А через несколько месяцев стало ясно, что в деле имеются нестыковки. Проблема шире и масштабнее, чем казалось на первый взгляд: речь идет о мошенничестве, позволяющем незаконно производить большие объемы древесины. И в деле снова замешаны субподрядчики «Икеа».

Мы едем вглубь долины на взятой напрокат машине. Склоны гор поросли лесом. Здесь начинается путь от дерева к мебели.

За рулем Егор Хрынюк, биолог и специалист по лесу в одной из самых уважаемых экологических организаций страны — Украинской группе охраны природы со штаб-квартирой в Киеве. Этот молодой темноволосый мужчина со сдержанными манерами наблюдает за состоянием лесов по всей Украине.

Он сопровождает нас в лес. Он направляет нас в нашей погоне за правдой.

В последние десять лет продажи «Икеа» по всему миру быстро растут. Ее потребность в древесине удвоилась. Согласно расчетам, «Икеа» использует для производства мебели одно дерево в секунду — и так круглые сутки весь год напролет.

Местное лесозаготовительное предприятие называется так же, как и ближайший поселок — «Великий Бычков». В его распоряжении — около 50 тысяч гектаров государственного леса, и это внушительная доля древесины, используемой «Икеа».

Чтобы отследить весь путь мебели, мы запрашивали официальные документы у украинских властей и искали информацию в базах данных. Итак, лесозаготовительная компания продает большую часть буковой древесины местному производителю мебели ВГСМ — крупнейшему клиенту и вместе с тем крупнейшему работодателю этих мест. ВГСМ производит заготовки для стульев и отправляет их в ЕС, а именно в Румынию, где они превращаются в стулья «Икеа».

Судя по объему производства, за год на стулья «Икеа» пускают тысячи здешних деревьев. Согласно отчету Earthsight, раньше из этой древесины делали популярные модели «Терье» и «Ингольф».

Как украинские деревья превращаются в мебель «Икеа»

1. Лесозаготовительная компания «Великий Бычков» продает древесину мебельной фабрике ВГСМ

Государственное предприятие «Великий Бычков» в первые три квартала 2021 года было единственным поставщиком ВГСМ, как мы узнали из официальных документов.

Мебельная фабрика за этот период купила в общей сложности 10 827 кубометров древесины.

По данным Earthsight за 2020 год, лесозаготовительная компания продает ВГСМ 73% буковой древесины, заготовленной с коммерческими целями.

2. ВГСМ продает мебельные заготовки румынской «Плимоб»

ВГСМ в основном производит заготовки для мебели из бука. Готовый товар выпускает работающая на «Икеа» фабрика «Плимоб» (Plimob) в Румынии.

Мы изучили экспортные данные и выяснили, что в первом квартале 2021 года «Плимоб» приняла в общей сложности 43 поставки распила бука от ВГСМ. Стоимость товара в каждой партии соответствовала суммам от 124 тысяч до 187 тысяч шведских крон.

96% продукции ВГСМ в конечном итоге превращается в мебель «Икеа», если верить докладу Earthsight.

3. «Плимоб» продает «Икеа» готовые стулья

«Плимоб» производит деревянные стулья. 98% продукции отправляются в «Икеа», по данным, представленным в статье 2018 года в швейцарской Le Temps.

Американская «Икеа» в июне 2021 года тоже получила партию стульев из бука с румынской фабрики. Мы узнали об этом из данных по американскому импорту.

В ноябре 2021 года множество товаров с этой фабрики продавались в «Икеа» в торговом центре Kungens Kurva — например, стулья «Терье», «Рённинге», «Ингольф» и «Экедален».

Сворачиваем на грунтовку. Перед нами — несколько изб с дымящимися трубами. Вид как из сказки. Кукарекают петухи, мимо пробегает собака. Пахнет грибами и сырой осенней землей.

Прямо за деревенькой начинается лес. К нам выходит мужчина. Холодно, изо рта идет пар.

«Стоп, предъявите пропуск!»

Егор Хрынюк заявляет, что для прогулок в украинских лесах пропуск не нужен. Лесник оглядывается.

«У птиц вывелись птенцы, их нельзя тревожить», — говорит он наконец.

Мы указываем на очевидную путаницу времен года, но мужчина упорствует. Через десять минут к нам подъезжает насквозь проржавевший фургон. Начальник местной лесозаготовки Николай Бочкор изучает нас из-под седых кустистых бровей.

«Покажу вам лес», — отрывисто говорит он.

На Украине свирепствуют взяточничество и коррупция. И лес не исключение. Каждый день круглый год незаконно вырубают множество деревьев.

Согласно отчету ЕС от ноября 2018 года, до 30% всех вырубок нелегальные. Некоторые уверены, что эта цифра намного больше.

Есть разные способы обойти закон, но одна схема повторяется постоянно. Чтобы рационально использовать лесные ресурсы, у каждой компании есть план вырубки, одобренный региональной природоохранной организацией. В этом плане указано, где, когда и как следует валить деревья. Но, помимо этого, компания может в определенных обстоятельствах сама решать судьбу зараженных, больных, поврежденных или сгоревших деревьев. По-английски это называется «санитарная вырубка», по-шведски — «защитная». На Украине систематически злоупотребляют этим правом.

Санитарная вырубка превратилась там в способ добраться до деревьев, которые нельзя трогать — на охраняемых природных территориях и в заповедниках, в молодых лесах и вблизи водоемов. Леса вырубают все больше.

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

«Когда начинаешь изучать применение санитарной вырубки на Украине, становится очевидно, что это правило стало огромным источником коррупции», — отмечается в докладе ЕС 2018 года.

Субподрядчик «Икеа», лесозаготовительная компания «Великий Бычков», удивительно активно борется с зараженными деревьями. В прошлом году санитарная вырубка составила 45% всей вырубки леса, по собственным данным компании.

«Как и во всех лесозаготовительных предприятиях на Украине, там заявляют о серьезных проблемах с грибами и короедом. Это неправда. Бывают отдельные вспышки, но не в таких масштабах», — говорит Егор Хрынюк.

И непохоже, чтобы масштабы этой деятельности сокращались. Сейчас «Великий Бычков» планирует санитарную вырубку почти 200 гектаров леса в целом ряде районов.

Чтобы проверить, в каком состоянии деревья, мы решили лично отправиться в лес, и, поскольку мы в этом деле не специалисты, нас сопровождает Егор Хрынюк.

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

Егор Хрынюк показывает первое такое место на карте Николаю Бочкору.

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

«Здесь».

Мы сверяемся с координатами GPS и подтверждаем, что это действительно то самое место. Куда ни глянь — буки всех возрастов, и каждое дерево помечено красным. Их приготовили к вырубке.

Стоит такая тишина, что можно услышать, как падают листья.

В уведомлении о вырубке утверждается, что деревья заражены опенком осенним, от которого возникает белая гниль. Егор Хрынюк — специалист по лесу, он умеет определять заражения. Он ходит от одного дерева к другому, пытаясь найти следы грибов или мицелия либо другие признаки заражения, такие как отмершие ветви и отсутствие листьев.

«Нет никаких признаков того, что эти деревья в плохом состоянии».

Местный начальник показывает на участок вверх по склону. «Там, чуть повыше, деревья, поваленные ветром», — сообщает он, хотя компания в решении о вырубке ссылается на грибы.

Aftonbladet: Зачем вы вырубаете здоровые деревья?

«Иначе невыгодно».

Начальник трогает корень носком ботинка. Похоже, он только что признался в намеренном нарушении лесного законодательства страны. В прошлом году на Украине ввели запрет на вырубку здоровых и неповрежденных деревьев. Тем не менее наши вопросы его озадачивают.

«Должна же быть финансовая выгода».

Мы осматриваемся и вскоре замечаем еще несколько злоупотреблений. Егор Хрынюк останавливается у одного из нескольких деревьев с большими дуплами. На нем тоже есть красная пометка.

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

Егор Хрынюк много раз сталкивался с незаконной вырубкой леса на Украине. Каждый раз он сообщал о нарушениях. Но инспекторы — это зачастую бывшие лесники, так что компании-нарушители заранее получают предупреждение о грядущей проверке. Когда инспекторы прибывают на место, деревьев уже нет — только пни. Каждый раз одно и то же.

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

«Чаще всего незаконная вырубка леса на Украине осуществляется при наличии всех необходимых документов», — сообщает Александра Хубицкая из антикоррупционной организации «Наши деньги».

В долине нескольких деревенских мужиков наняли на строительство деревянного моста через ручей. Прежний мост смыло во время наводнения летом 2020 года — сильнейшего на памяти нынешнего поколения. В результате уничтожения лесов земля все хуже сдерживает воду, а экстремальных дождей становится все больше из-за изменения климата.

Егору Хрынюку еще нет и тридцати, но он уже собственными глазами видит, как меняется природа: горы оголяются, альпийские луга мало-помалу исчезают.

Вдобавок к этому лес вырубают все активнее.

«Одно тянет за собой другое. По моему мнению, лес уже на грани катастрофы», — говорит Егор Хрынюк.

Чиприан Галуска (Ciprian Galusca), координатор по вопросам охраны леса в румынском отделении Greenpeace, особо отмечает, что в результате широкомасштабной вырубки леса исчезает естественная среда обитания медведя и рыси.

«Мы должны сделать все возможное, чтобы защитить эту экосистему. Увы, развитие идет по другому пути».

У начальника местной лесозаготовки свой взгляд на происходящее. Возможностей в горных деревеньках мало, рассказывает он, когда мы прощаемся. Мужьям трех его дочерей пришлось уехать в Чехию в поисках работы.

«Если бы не лес, нам всем пришлось бы уезжать».

По пути к следующему месту мы проезжаем камень внушительного вида. Здесь находится географический центр Европы, если верить табличке. Правда, чувство возникает совсем другое — ощущение окраины, периферии.

Мы поднимаемся в гору по шуршащему ковру опавшей листвы. Эта полоса лиственного леса — лес именно того типа, который некогда покрывал большую часть европейского континента. Лесников не видно.

Дорога непростая, но в плане вырубки лесозаготовительного предприятия указаны конкретные координаты, так что мы не боимся заблудиться. Через полтора часа мы на месте — на высоте 450 метров.

Участок, предназначенный под вырубку, в длину около ста метров и примерно такой же в ширину. Светло-серые стволы буков стрелами возносятся к небу — метров на 25 или 30. Кроны похожи на мозаику в осенних цветах.

«Вот как выглядит действительно красивый и экологически ценный лес», — говорит Егор Хрынюк.

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

Вступить в битву за лес в качестве активиста означает объявить войну могущественным и безжалостным силам. На Украине это весьма рискованно.

Однажды утром в июле 2018 года на активистку Екатерину Гандзюк, которая вела расследование, касающееся государственной лесозаготовительной компании, напали, когда она шла к машине. Мужчина в черном выплеснул на нее почти литр серной кислоты. Пролежав три месяца в больнице, активистка скончалась.

Третий участок — всего в 400 метрах от второго. Мы проходим под кронами деревьев. Останавливаемся, прислушиваемся. Тишину нарушает какой-то звук. Это рев бензопилы, вгрызающейся в стволы живых и здоровых буков.

Работа идет полным ходом. Сплошная вырубка — уничтожают все деревья.

Мы осторожно подходим поближе. Если нас заметят, то увезут прочь, а работа остановится. Ныряем в бурелом. Пахнет древесной стружкой и соком. Запах свежеповаленных деревьев.

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

В своей рекламе «Икеа» подчеркивает, что вся древесина, из которой изготовлена мебель, сертифицирована Лесным попечительским советом — международной организацией, гарантирующей рациональную и безопасную эксплуатацию лесных ресурсов. На плакатах Лесного попечительского совета — рабочие в современных защитных костюмах.

Человек перед нами работает на крутом склоне в одиночку и без всякой защиты. Ни защитного костюма, ни каски. Рабочий останавливается, чтобы перевести дух, делает несколько глотков из бутылки. Потом он снова берется за дело. Бензопила с шипением врезается в очередной высокий бук, на вид столетний. С оглушительным треском дерево валится со склона. Мужчина быстро обрубает ветви и сучья. И принимается за следующее дерево.

«Планета — наш единственный дом. И сейчас мы нужны нашему дому более, чем когда-либо прежде. Изменения климата угрожают сделать нашу планету необитаемой, а люди по всему миру становятся жертвами растущего неравенства и нетерпимости. Для нас это неприемлемо» (из стратегии устойчивого развития «Икеа»)

Граница со страной ЕС Румынией проходит в долине в нескольких милях отсюда. По ту сторону — огромная система взаимосвязанных экономик, которой тоже нужна отладка. Древесиной можно заменить и пластик, и ископаемое топливо, она может помочь нам спасти климат. Но ее тоже надо откуда-то брать.

На четвертый участок мы прибываем на закате. Мимо нас проходят двое мужчин с бензопилами на плечах, каждый дымит сигаретой. Один из них насвистывает. Рабочий день подошел к концу, и они не задают вопросов.

Поднимаемся в гору всего минут десять, и вот мы на месте. Половина деревьев уже вырублены. Поваленные буки пока лежат здесь, но скоро их увезет подрядчик «Икеи». Ни на срезах, ни на стволах или листьях нет следов заражения.

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

Егор Хрынюк качает головой. «Смотрите, насколько далеко это от рационального использования лесных ресурсов».

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

Лесник, отказавшийся назвать свое имя, лишь усмехается. «Представьте, что вы пришли к врачу. На вид вы здоровы. Но он заявляет вам, что вы больны…»

Он останавливается на полуслове. Опускает глаза, пинает камушек. Что-то явно кроется между строк.

Сейчас субподрядчик «Икеа» планирует санитарные вырубки на 249 участках. Мы посетили четыре места, выбранные случайным образом. На каждом из них мы видели уже поваленные или размеченные для вырубки здоровые на вид деревья. Признаков заражения не было нигде.

Егор Хрынюк намерен сообщить об увиденном в Украинскую экологическую инспекцию, хотя и понимает, что это ни к чему не приведет.

У главного офиса лесозаготовительной компании «Великий Бычков» темно-зеленая остроконечная крыша, будто он хочет слиться с окружающим пейзажем. Мы несколько раз пытались связаться с директором Юрием Михайловичем, оставляли ему сообщения. Мы объясняем секретарше, зачем пришли: хотим спросить, почему он подписывает разрешения на вырубку здоровых деревьев. Она отходит, чтобы сделать звонок, возвращается минут через десять.

«До конца недели директор в отъезде».

А его заместитель?

«В отпуске… По семейным обстоятельствам».

Оставляем визитку, нам обещают, что перезвонят. Больше никто к нам не подходит.

Метрах в пятидесяти вверх по улице расположена частная мебельная фабрика ВГСМ — следующее звено цепи поставок «Икеа». Из трубы валит черный дым. На огромном внутреннем дворе — штабеля древесины, предназначенной на распил. Из нее сделают мебельные заготовки, которые отправятся на экспорт.

По данным местных СМИ, мебельная фабрика была построена в 1990-е специально для «Икеа», вплоть до 2008 года ею владела дочерняя компания «Шведвуд». Шведский мебельный гигант и сейчас определенно ее важнейший клиент.

Нынешний исполнительный директор Ирина Мацепура пожелала, чтобы мы заранее прислали ей список вопросов, которые хотим задать. Однако охранник сообщает, что она передумала давать интервью. Позже начальница присылает смс-сообщение, в котором пишет, что у нее неприятный опыт общения с прессой. «Компания решила ограничить визиты гостей. Мы рассчитываем на улучшение обстановки, когда прекратятся нападки на лесозаготовительную и деревообрабатывающую промышленность».

Мы стоим на перекрестке и ждем, когда мимо проедет телега с лошадью. Несколько школьников наискосок переходят дорогу — бегут на ржавую и полуразрушенную детскую площадку на той стороне улицы.

Те, кто контролирует лес, контролируют и близлежащие населенные пункты.

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

Примечание: через четыре недели после заявления от Егора Хрынюка Украинская экологическая инспекция провела проверку наших первого, второго и третьего участков. По словам инспекторов, первый и третий участки к тому времени уже вырублены, и законность вырубки проверить нельзя. На участке номер два облетела листва, так что невозможно судить, здоровы деревья или нет.

Участки в «лесу Икеа», которые мы посетили

Место номер один

Координаты: 47.985668, 24.239284

Тип леса: природный лес, преимущественно буковый.

Размеры вырубки: 1,8 гектара, выборочная вырубка.

Что мы обнаружили: утверждается, что деревья заражены опенком осенним, который вызывает белую гниль. Мы проверили десяток деревьев, помеченных для вырубки, и ни на одном из них не обнаружили следов заражения. Под вырубку идут и деревья с дуплами.

Вероятные правонарушения:

— вырубка здоровых деревьев. Нарушение параграфа 12 Закона о санитарных правилах в лесах Украины;

— вырубка деревьев с дуплами. Нарушение параграфа 26 Закона о санитарных правилах в лесах Украины.

Место номер два

Координаты: 47.971611, 24.107972

Тип леса: природный лес, состоящий из бука, ясеня и ели.

Размеры вырубки: 1,5 гектара, выборочная вырубка.

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

Вероятные правонарушения:

— вырубка здоровых деревьев. Нарушение параграфа 12 Закона о санитарных правилах в лесах Украины.

Место номер три

Кооординаты: 47.968001, 24.110496

Тип леса: природный лес, состоящий из бука, ясеня и ели.

Размеры вырубки: 1,0 гектар, сплошная вырубка.

Что мы обнаружили: утверждается, что деревья заражены опенком осенним, который вызывает белую гниль. Поскольку идут работы, сложно оценить состояние деревьев с близкого расстояния. Издалека они выглядят вполне жизнеспособными.

Вероятные правонарушения:

— сплошная вырубка здоровых деревьев. Нарушение параграфа 27 Закона о санитарных правилах в лесах Украины

Место номер четыре

Координаты: 48.074253, 24.081857

Тип леса: природный буковый лес.

Размеры вырубки: 1,5 гектара, выборочная вырубка.

Что мы обнаружили: утверждается, что деревья заражены опенком осенним, который вызывает белую гниль. Большая часть уже вырублены. Мы проверили десяток деревьев, помеченных для вырубки, и ни на одном не обнаружили следов заражения. Судя по следам колес, через ручей ездит тяжелая техника.

Вероятные правонарушения:

— вырубка здоровых деревьев. Нарушение параграфа 12 Закона о санитарных правилах в лесах Украины;

— проезд транспортных средств через русла ручьев. Нарушение в том числе параграфа 40 Закона о водных ресурсах Украины

Материалы ИноСМИ содержат оценки исключительно зарубежных СМИ и не отражают позицию редакции ИноСМИ.

На дворе октябрь, в npm залита новая версия фреймворка Chorda 3.0. Можно, наконец, устроиться поудобнее за чашечкой кофе и подвести некоторые итоги

Про сам фреймворк можно почитать здесь, посмотреть тут и пощупать там

В прошлый раз я рассказывал о дизайн-функции, чертежах и построении API компонентов, а в этот раз попробую заинтересовать вас некоторыми очевидными решениями и не очень очевидными следствиями, которые появились во время работы с Chorda

Очевидные решения

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

Расширение библиотечных компонентов

Начну с декларативного подхода и примесей — краеугольного камня Chorda. Для наглядности нам понадобится немного кода.

Создадим простой компонент на JSX (React) с кнопкой и текстом. Задача: при клике по кнопке меняется текст

const MyComponent = () => {

	const [data, changeData] = useState('')

	const hahdleClick = (e) => {
		changeData('Hello')
	}

	return <div>
  	<button onClick={handleClick}>Click me</button>
  	<p>{data}</p>
	</div>

}

// вот так выглядит применение компонента
<MyComponent/>

Сделаем похожий функционал, используя чертеж Chorda

// вырожденная дизайн-функция
const MyComponent = () => {
    return {
        templates: {
            button: {
                tag: 'button',
                text: 'Click me',
                events: {
                    // обработка событий VDOM
                    $dom: {
                        click: (evt, {data}) => {
                            data.$value = 'Hello'
                        }
                    }
                }
            },
            text: {
                tag: 'p',
                reactions: {
                    // реакции компонента на изменение переменной скоупа
                    data: v => patch({text: v})
                }
            }
        },
        initials: {
            // инициализация переменной в скоупе
            data: () => observable('')
        }
    }
}

// создаем чертеж
MyComponent()

Ну, все. Расходимся, ребята. Очевидно же, что шаблонный синтаксис намного проще и понятнее.

Но

Давайте посмотрим, что происходит с нашим JSX компонентом дальше. Итак, мы выполнили задачу, и теперь передаем наши наработки коллеге, скажем, в составе корпоративной или публичной библиотеки. Через некоторое время от коллеги приходит просьба: хочу, чтобы компонент можно было стилизовать. Не вопрос. Самый простой и быстрый способ это сделать — дать возможность управлять классом корневого компонента через пропсы.

Поехали

// Придется залезть в библиотеку (!) и сделать пару правок

const MyComponent = (props) => {

    const {rootClassName} = props

    /* Тут ничего не меняется. Пропускаем */

    return <div className={rootClassName}>
        <button onClick={handleClick}>Click me</button>
        <p>{data}</p>
    </div>
}

// рендерим
<MyComponent rootClassName="custom" />

Отлично!

Тем временем в Chorda

// Менять оригинальный чертеж необходимости нет

// В месте применения создадим примесь
mix(MyComponent(), {
    css: 'custom',
})

Естественно, стилизацией обычно дело не заканчивается. Чем дальше, тем больше хотелок и тем больше пропсов нам понадобится добавить.

На самом деле подобные извращения следует пресекать в зародыше, и сразу предоставлять возможность потребителю «слотировать» вложенные компоненты. Однако, в нашем примере компоненты оказались жестко связаны state-параметром data. Просто так вытащить их не получится, поэтому посмотрим, во что может превратиться реализация с пропсами

const MyComponent = (props) => {

    const {rootProps, buttonProps, text: MyText} = props

    /* тут ничего не меняется */

    return <div {...rootProps} >
        <button onClick={handleClick} {...buttonProps} >Click me</button>
        <MyText>{data}</MyText>
    </div>
}

<MyComponent 
    rootProps={{className: 'custom'}} 
    buttonProps={{className: 'custom-button'}}
    text={props => <p className="custom-text">{props.children}</p>}
    />

В ситуации с чертежом без особых именений

// Расширяем примесь
mix(MyComponent(), {
    css: 'custom',
    templates: {
        button: {
            css: 'custom-button'
        },
        text: {
            css: 'custom-text'
        }
    }
})

Для React типовое решение проблемы это вынесение состояния из компонента. Получившийся «глупый» компонент уже не будет иметь внутри сильной связи и позволит легко «слотировать» вложения. Но здесь есть подводный камень. Архитектура такая штука, что если где-то убыло, то где-то прибыло. Выбрасывая сложность из наших компонентов мы ее копим в другом месте, а именно там, где компонент будет применяться

Стоит признать, с примесями тоже не все так гладко. Чтобы сделать хорошо расширяемый компонент, его необходимо сильно декомпозировать, а это напрямую влияет на производительность и восприятие кода в целом (по второму пункту полезно почитать о причинах появления setup во Vue 3)

Так к чему все это сравнение? Тот же React может предложить много вариантов и подходов для расширения функционала, один экзотичнее другого. Chorda же предлагает один путь (на самом деле нет), что на мой взгляд экономит на выборе уйму времени

Этот компонент мне не подходит

Идем дальше. Мы рассмотрели как именно выполняются изменения отдельного компонента, но что если вы являетесь не автором библиотеки, а ее потребителем, и столкнулись с проблемой нехватки функционала или дефектом?

Тогда на выбор:

1. Делаем форк, вносим в него правки. Делаем PR в репо библиотеки. Пока ждем влития, пользуемся форком

2. Делаем свой компонент. Используем его вместо библиотечного. Ждем новой версии библиотеки

3. (для обладателей особого дара убеждения) Объясняем автору библиотеки в чем он не прав и почему он должен внести нужные вам правки как можно скорее. Профит!

4. Забиваем

Если вы используете Chorda, то у вас появляется еще один вариант: подмешать свой функционал к чужому компоненту. В этом случае компонент как-бы продолжает оставаться частью оригинальной библиотеки, но в то же время содержит нужные вам изменения

Mount или не Mount?

Наверно, правильнее этот вопрос надо задать так: в какой момент должна начинаться обработка бизнес задач?

Хорошо проиллюстрирует мою мысль пример с загрузкой данных в store приложении при открытии страницы. Как правило, загрузка выполняется по событию монтирования узла виртуального DOM, что есть странно — зачем что-то добавлять в DOM, если данных еще нет? Почему бы нам сначала не загрузить данные, а потом решать — рендерить что-то или нет. Тут ситуацию немного спасает Suspense и понятие асинхронных компонентов, когда у каждого из них есть своя отложенная задача и, соответственно, отложенная отрисовка

Мне же больше нравится вариант, когда загрузка вообще никак не связана с рендерингом. В Chorda бизнес-логика находится на уровне дерева компонентов, а результаты выполнения бизнес-задач влияют только на store/state, не касаясь отрисовки напрямую

Все мы вместе и каждый сам по себе

В Chorda состояние компонента определяется скоупом (что-то вроде локального store). Компонент видит только свой скоуп и работает только с ним, считая, что вокруг никого нет. Это позволяет спокойно выполнять смешивание, не опасаясь сломать жесткие связи между компонентами

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

Здесь мы подходим к такой штуке, как конвейер обработки (вычисление-патч-отрисовка). Он, как и любое другое значение, попадает к компонентам через скоуп, и его, так же как и любое другое значение, можно настроить локально. К примеру, стратегия базового конвейера дает построение дерева компонентов в ширину с удержанием задач отрисовки до окончания обработки всех патчей. Если для вашего компонента или блока компонентов такое решение не подходит, вы можете подключить к ним свой кастомный конвейер

Неочевидные следствия

А вот некоторые моменты не являлись изначальной целью, но проявились по мере развития фреймворка

Встраивание в существующие проекты

Реализация виртуального DOM не входит в состав Chorda, т.к. разработка еще одного нового отрисовщика не решала моих проблем. Поэтому я собирался использовать какой-нибудь из уже существующих. Для того, чтобы попробовать Chorda в деле, я собрался переписать с нуля пару домашних React-проектов. Но приступив, почти сразу понял, что это совсем не обязательно. Можно постепенно заменять отдельные компоненты, подключив правильный рендерер, и так потихоньку съесть всего слона целиком.

Интересный вопрос: если фреймворк использует React, то можно ли сказать, что приложение, которое использует данный фреймворк, написано на React?

Загружаем и работаем

Сомнительное следствие конечно, но для некоторых может оказаться чрезвычайно важным. Создание компонентов и отрисовка присходят в runtime, без этапа транспиляции. Подключив ядро Chorda и рендерер, можно сразу писать код, который тут же будет исполняться в браузере.

Правда вот, SSR превратился в нетривиальную задачу

Поведенческие компоненты

Тут скорее интересное наблюдение. Раньше я сталкивался только с таким подходом к «глупым» компонентам: есть простой компонент без логики работы, который знает как ему рисоваться, затем поверх него создается «умный» компонент, который включает в себя «глупый», добавляя некоторое поведение.

Так вот в Chorda (из-за того, что можно легко менять порядок смешивания) у меня появился набор компонентов, в которых есть только поведение без правил отрисовки (обычно это набор стандартных реакций). И получилось, что, наоборот, уже к поведению начинает примешиваться способ отображения

Как это может выглядеть:

export default () => {
    // поведенческий компонент Text
    return Text({
        as: Paragraph, // "глупый" компонент Paragraph
        text$: $ => $.user.name
    })
}

Что в итоге?

Естественно, это не все, о чем хотелось рассказать. Но к этому времени кофе уже закончился, а статья на две чашки это уже лонгрид. Смотрите примеры, читайте доки, оставляйте отзывы.

Если фреймворк вас заинтересовал, или у вас есть предложения по его развитию — всегда пожалуйста.

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