Как стать автором
Обновить

Teaful — крошечная, простая и мощная библиотека управления состояниями React

Время на прочтение9 мин
Количество просмотров4.4K
Всего голосов 5: ↑4 и ↓1+3
Комментарии12

Комментарии 12

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

Я понял. (Не хочу быть душным и не имею в виду конкретно создателей Teaful) Это выпускники курсов по реакту берут свои учебные наработки ("создай свой редакс за час") и релизят по сто штук в месяц

memo не решает проблему ре-рендеринга?

Полагаю, поддержки Type Script нет и не предвидится.

В принципе TS 4.5 уже может типизировать такие вещи. Там главная сложность в том что нужно генерировать useCount из { count: 1 }. Но последние версии Typescript этому научились.

Безотносительно самой библиотеки. Касаясь только КДПВ (картинки для привлечения внимания) статьи:



Нет я конечно понимаю, что всю эту библиотеку одним useState не заменить, но неужели нельзя было без вот этих нелепых манипуляций обойтись?

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

Да. Всё так. Но обратите внимание на код — этот state только локально и используется.
То есть для демонстрации примера изолированного от компонентов store надо было нарисовать совсем другую картинку :)

Чтобы cart.priceвсегда был вычисленным значением другого свойства, например из cart.items, используем функцию onAfterUpdate:

Оу, каскадные обновления стейта! Вроде бы известный антипаттерн (по крайней мере в МобХ автор настоятельно советует вместо этого использовать компутеды).

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

Заключение. Преимущество fragmented-store заключается в том, что она работает с React Context и нет необходимости создавать много контекстов вручную.

Признаться сама идея использовать контексты для каждой отдельной взятой переменной мне показалась слишком уж бредовой. Я полез в исходный код. Там нет никаких контестов. Там просто another one реализация observable, но очень очень примитивная, и очень обильно эксплуатирующая Proxy. Вот все её зависимости:


import {useEffect, useReducer, createElement} from 'react';

Как видите тут нет никакого useContext и createContext. У неё своя собственная реализация observable. По сути это просто ещё один глобальный store с forceRerender-ом.


А теперь посмотрим на самую первую версию:


import React, { useState, useContext, createContext } from "react";

Вот в ней и были все эти бредовые потуги с контекстами на каждую переменную. Благо они ушли в небытие.


Рекомендация автору (статьи на хабре) — удалить этот шедевр.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий