Использование магазина с Lit-элементами

Мне было интересно, почему так сложно найти и использовать любой магазин с светом. Конечно, главными подозреваемыми являются редукс и юнистор. Они хороши, и есть несколько хороших статей о том, как использовать их с lit, но, честно говоря, я чувствовал себя подавленным, используя их.
Если вы знаете lit, который мы широко используем в GotoResolve, вы знаете, что это простая библиотека, которая помогает вам писать веб-компоненты без особого шаблона.
В любом случае, если вы хотите использовать магазин, вы должны подписаться на изменения состояния и если вам нужно, чтобы пользовательский интерфейс был повторно отрендерен. , вы также должны зарегистрировать свойства. В этот момент вы только начали писать ненужную часть кода, которая могла доставить массу неприятностей.
Попытался придумать, как все описать в геттере свойств. Это было бы так удобно и полезно, и это улучшило бы читабельность.
Еще одна моя претензия к Redux — это создание действий, которые описывают, что делать, и редюсеров, которые знают, как это делать, не говоря уже о том, чтобы выяснить, как использовать асинхронные действия. Решение заключается в добавлении промежуточного программного обеспечения… Что может быть проще? Ох уж эти могущественные промежуточные программы...

Через некоторое время мне захотелось написать еще одну JavaScript-библиотеку, которая создает хранилище и управляет им, выполняет всю магию и сводит шаблонный код к минимуму. Через пару дней работы родился новый магазин. Ура! Давайте посмотрим, как его использовать, установим зависимость с yarn или npm:

yarn add lit-element-simple-context

Затем создайте магазин:

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

Подключение хранилища к компоненту — это один вызов метода в части определения пользовательского элемента. Это примесь, которая добавляет в класс некоторые дополнительные элементы и регистрирует наш компонент в хранилище. А вот и моя любимая часть, подписка на свойства хранилища в геттере properties только с одним дополнительным атрибутом (или двумя, если мы хотим переименовать его).
fromContext: true сообщает библиотеке, что мы ищем эту переменную в хранилище с точно таким же именем. При необходимости мы можем переименовать его с помощью атрибута conextKey: string. Вот и все! Мы просто подписались на изменения. Если нас интересует, какие значения поступают из хранилища, вместо того, чтобы исследовать селекторы или mapState, нам просто нужно проверить наш геттер properties.

Остальные части весьма скептически относятся к тому, стоит ли писать действия, редукторы и селекторы отдельно. Я думаю, что в большинстве случаев это увеличивает сложность кода, поэтому в моей библиотеке есть только «действие» 2-в-1, которое определяет, как помещать данные в хранилище.

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

Вот оно! Еще одна магазинная библиотека.

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

Вы можете проверить это здесь: https://www.npmjs.com/package/lit-element-simple-context

Вы можете внести свой вклад здесь: https://github.com/icsaba/lit-element-context