<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://chorda-docs.netlify.app/blog</id>
    <title>Chorda Blog</title>
    <updated>2021-11-08T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://chorda-docs.netlify.app/blog"/>
    <subtitle>Chorda Blog</subtitle>
    <icon>https://chorda-docs.netlify.app/img/favicon.ico</icon>
    <entry>
        <title type="html"><![CDATA[Root-Branch-Leaf]]></title>
        <id>rbl</id>
        <link href="https://chorda-docs.netlify.app/blog/rbl"/>
        <updated>2021-11-08T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Стратегии построения веб-приложения]]></summary>
        <content type="html"><![CDATA[<h1>Root-Branch-Leaf</h1><h2>Стратегии</h2><h3>Корневые стратегии (R)</h3><p>Приложение - набор глобально уникальных переменных и action-ов</p><p>Action-ы и значения собираются в отдельные реактивные переменные</p><p>Не предполагается явное создание реакций. Управление вложенными компонентами осуществляется через инжектирование. Таким образом обеспечивается IoC</p><p>Контракт (пропсы) отсутствуют</p><h3>Стратегии ветвей (B)</h3><p>Фрагменты - полноценные компоненты, имеющие собственные action-ы</p><p>Между вложенными элементами разделяются action-ы. Предполагается, что у каждого вложенного элемента может быть свой скоуп, это означает, что проброс значений должен выполняться явно</p><p>Контракт (пропсы) содержит как правило только инжекторы</p><p>Известно об action-ах контекстаю. Т.е. явно накладываются ограничения на контекст</p><h3>Стратегии листьев (L)</h3><p>Элементы - компоненты, которые используют только локальный скоуп</p><p>Между вложенными компонентами разделяются реактивные значения</p><p>Контракт (пропсы) содержит инжекторы и события</p><p>Сложные компоненты могут знать об action-ах контекста (или требовать их)</p><h2>Приложения</h2><h3>R-тип</h3><p>Глобальный store</p><p>Страница с формой ввода</p><h3>B-тип</h3><p>Изолированные части, объединенные подпиской</p><p>Микрофронтенды</p><h3>L-тип</h3><p>Нет store</p><p>Статическая страница с несвязанными виджетами</p>]]></content>
        <author>
            <name>Eliace</name>
            <uri>https://github.com/eliace</uri>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Новая версия Chorda 3.1]]></title>
        <id>chorda-release-3_1</id>
        <link href="https://chorda-docs.netlify.app/blog/chorda-release-3_1"/>
        <updated>2021-11-04T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Описание нововведений Chorda 3.1]]></summary>
        <content type="html"><![CDATA[<p>Что нового? </p><ul><li>Новый встроенный рендерер</li><li>Joints и Reactions обрабатывают каждый элемент скоупа отдельно</li><li>Удалены лишние реинициализации при синхронизации компонентов</li><li>Реакции возвращают в качестве результата набор опций. Двигаемся к отказу от явного вызова patch</li><li>Добавлен метод init для инициализации скоупа</li><li>Переименование свойств</li><li>Изменена обработка callable в эффектах</li><li>Отказываемся от iterable</li></ul>]]></content>
        <author>
            <name>Eliace</name>
            <uri>https://github.com/eliace</uri>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Новая версия Chorda 3.0]]></title>
        <id>chorda-release-3</id>
        <link href="https://chorda-docs.netlify.app/blog/chorda-release-3"/>
        <updated>2021-10-25T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Описание нововведений Chorda 3.0]]></summary>
        <content type="html"><![CDATA[<p>Что нового?</p><ul><li>&quot;Ленивый&quot; скоуп</li><li>Callable</li><li>Переименованы некоторые свойства</li><li>Упрощение joint-ов и контроль подписки</li><li>Вложенные обработчики событий</li><li>Служебные события</li><li>Ну и костыли typescript</li></ul><h2>&quot;Ленивый&quot; скоуп</h2><p>Передача скоупа раньше представляла из себя копирование содержимого родительского скоупа и слияние его с дочерним. Простая рабочая схема, но у нее были проблемы:</p><ul><li>лишние копирования ненужных свойств. Чем жирнее скоуп, тем больше копирований</li><li>ограниченное разрешение кросс-ссылок. Разрешение происходило только во время инициализации и не все компоненты скоупа могли быть доступны в этот момент</li></ul><p>Теперь скоуп разрешает переменные лениво и в новой последовательности:</p><ol><li>Инжектируемые переменные (определяются разработчиком)</li><li>Проецируемые переменные (задаются при использовании итераторов)</li><li>Инициализационные переменные (переменные по умолчанию)</li><li>Переменные контекста (передаются от родительского компонента)</li></ol><h2>Callable</h2><p>Новый тип объектов, содержащий функцию. На результат выполнения функции можно подписаться через раздел events. От computable отличается тем, что значением является функция и в первую очередь она предназначена для изменения других свойств скоупа</p><h2>Переименования</h2><p>Покинули чат: <code>scope</code>, <code>bindings</code></p><p>Появились: <code>injections</code>, <code>reactions</code>, <code>initials</code></p><h2>Joint-ы</h2><p>Теперь джоинты не привязаны к переменной скоупа, а подключаются ко всему скоупу. Все подписки, выполняемые во время джоинта, отзываются при удалении компонента</p><h2>События</h2><p>Для подключения к событиям теперь необходимо указывать прослушиваемую переменную. В первую очередь это сделано, чтобы не проверять весь скоуп в поисках зарегистрированных событий. Регистрация событий теперь не нужна</p><p>В разделе <code>events</code> можно подписываться на callable переменные</p><h2>Служебные события</h2><ul><li>afterInit</li><li>afterDestroy</li><li>afterSyncIndexed</li><li>afterSyncKeyed</li><li>afterAddKeyed</li><li>beforeRemoveKeyed</li><li>afterRender</li></ul><h2>Typescript</h2><p>Для корректного управления угадайкой (infer) следует использовать Blueprint/InferBlueprint. На данный момент это &quot;костыльное&quot; решение, т.к. другой альтернативы нет</p><p>Частичное применение генериков так же недоступно. Общая рекомендация: не модифицировать генерики ответа, работать только с расширением или приведением типов аргументов</p><h1>Концептуальные проблемы</h1><ul><li>невозможно использовать один узел в разных деревьях</li><li>использование VDOM, хотя есть полная информация об изменении DOM</li><li>невозможно клонирование или перенос поддерева</li></ul>]]></content>
        <author>
            <name>Eliace</name>
            <uri>https://github.com/eliace</uri>
        </author>
    </entry>
</feed>