🔥

Тред (@xnimorz)


@jsunderhood @xnimorz @hh_ru А можно подробнее об опыте на svelte ? Сколько уже натыкаюсь на стоить на хабре про него. но что-то внутри отказывается воспринимать его как что-то серьёзное
Да, конечно. Сразу предупреждаю — опыт не production, личный. По svelte у меня есть один проект на github — маски ввода: github.com/xnimorz/svelte…. Они мне нужны были, потому что у меня есть маленькая цель: сделать приложение комбайнер для домашних финансов. twitter.com/DonnaInsolita/…

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

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

А потом при том же переходе на реакт появлялись боли: тут нужно PureComponent, там отписку правильную сделать, здесь в ref null может прийти, с хуками тоже были боли, например, useCallback и useMemo когда использовать?

Немного по-другому у меня сложилась история со svelte. Про плюсы svelte тут уже писали и мне лично svelte очень по душе. Но я расскажу про неприятные вещи с которыми столкнулся. Это не фатальные минусы, это то, от чего страдает DX.

Нестабильность API. Я разрабатывал на 3.12.1, а демку делал на другой версии (ниже). У меня в итоге сломался bind:this. Описание ошибки не нашел в истории браузера, но выглядела она как internal_somevar is not defined. Что усложнило поиск и пришлось лезть в код svelte

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

Если вам нужно прокинуть класс, вам придется объявить его как :global(класс) codesandbox.io/s/svelte-input… (вот здесь в App.svelte пример).

Если вы делаете утилитарный компонент и вы хотите прокинуть все props в обычный элемент (например aria атрибуты или еще что-то), вам придется делать деоптимизацию обращаясь к $$props.

Еще неудобство вот github.com/sveltejs/svelt… Иногда вы зависите от порядка переменных: github.com/sveltejs/svelt…

Это те боли, которые у меня возникли за последние примерно 2 месяца.