Pull to refresh
54
0
Корзунов Антон @kashey

javascript, webgl, maps, react, орфография(нет)

Send message
Много историй, много примеров того как что-то сделать неправильно, жирное многоточие в конце, без внятной ссылки на github.com/bem/bem-react и каких либо примеров ну теперь точно правильного подхода.

Обожаю БЕМ с точки зрения CSS, что его js релизации всегда вызывали если не тошноту, то удивление.
You know, I just bought a paid version of Grammarly (or course I was using it already)… And it did not find anything.
I mean — I have invites. But only two.
While habr should(and going to) expand to the western world rapidly — we are unable to help him.
I want to invite a few friends of mine, but where to get those _invites_? With all my activity I've deserved only 2.
1. А можно пример про то как можно лучше?
2. Ну это вроде как «локальность». Никогда проблем с этим не было.

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


Сам React, а точнее react-testing-tool и компания так не умеет, и всегда рендерит все от начала до конца. Тут уже вступают в дело моки (или Boundary), которые могут ограничить и изолировать тесты.


Но моки это сложная тема — мокать можно по разному и в разных местах. Для (очень) многих моки в тестах Реакта это fetch-mock, который течет через пару слоев абстраций. Мокать можно только dependency, селекторы и ресолверы. В общем jest.mock, а еще лучше proxyquire, который позволяет мокать только прямые зависимости.


Проблема опять же в изоляции. В proxyquire/jest такого просто нет, в mockery она работает как говно, и только в rewiremock ее становится возможным использоваться, как и типизированные моки.

> В реакт, ближе всего по духу к слотам — render callback.

Специально проверил — render callback это старое имя render prop. Не слот.

> И сравнивать юнит с интаграционными тестами и говорить что одни нужнее других, это свидетельство о нездоровом непонимании процесса разработки.

Вводная часть статьи как раз про то, что одни нельзя заменить другими, и оба нужны в форме симбиоза имени Пирамиды Тестирования. Не в том плане что каждый следуйщий уровень уже и тормознее, а в том, что каждый следуйший уровень опирается на предыдущий.
Отличная идея. Но TypeScript, который я очень люблю, не очень любит defaultProps.
Слоты они и в вебкомпонентах, ангуляре и vue — слоты.
И почему декларативность нарушается? Наоборот — в одной половине четко видно где что-то будет, а в другой видно что именно, без необходимости искать конкретное место подключения.
Именно так и делают. Даже большие серьезные ребята иногда мотают головой и делают именно как Дэн говорил. Жалко парня — на нем висит очень большая отвественность, как и на всех «лидерах мнений».
Лично я знаю только одного человека, который Дэна, скажем так, не любит. За то что он подорвал все устои, и все провереренные десятилетиями патерны в труху и не разgithub.com/gaperton.
Для меня Дэн всегда был больше не про «знания», а про «эмпатию». За что его все и любят. Но слепо верить одному человеку, тем более с достаточно узким (и коротким) опытом — странно.
Тут какое-то столкновение мелкого с мягким:
— «клиент» не будет менять код на лету, это фича чисто для разработки
— «девелопер» тоже может обновить страницу
— решение для сохранение данных форм между просмотрами лежит в совершенно другой плоскости.
— таким образом React-Hot-Loader никак не может ни помочь, ни помешать удобству интерфейсов.
— и не стоит забывать — что «better UX» это работа дизанейнера, тестировщика, менеджера, маркетолога и програмиста. И програмист в конце списка.
Вообще странное это дело — мне не совсем понятно как технически эти бэкдоры можно сделать:
— без двух :approved: PR не замержить, привет SOX compliance.
— потом еще SRE проверит что было закомичено перед релизом
— потом еще внешние аудиторы посмотрят
— потом коллега git history откроет.
Тем более в Австралии(откуда я и пишу) наркомания иногда заходит так далеко, что только «внешние аудиторы», в роли которых часто выступает государство, может мержить в мастер.
Тут мышка не проскочит, не то что бэкдор какой-то.
Кладем чистые функции в чистые ES-модули, и где все сайд эффекты — зависимости модуля, и радостно мокаем все эти внешние зависимости в ноль, получая возможность тестировать конечный код в реальном вакууме, не теряя статический анализ и типизацию.
Все известные мне полифилы построены на этом принципе — использование переданного обьекта для хранение значения.
Есть вырожденный случай для IE(IE8) конкретно для DOM обьектов, где для них _есть_ WeakMap (а для не-DOM его нет).
WeakMap полифилиться без проблем и есть в core-js, хотя уже в IE11 он нативный.
Насчет immutable — все верно. Если ключа нет, и ключем является обьект — его изменение изменит ключ. На безрыбье и рак — рыба.
На самом деле все не так страшно — если уж что-то начало апдейт дерева, и добавляет всюду новые onClick — ну возможно можно использовать более «интересные» решения чтобы распространение этого апдейта прекратить.
> react/forbid-component-props
Передача классов между в компоненты, в случае следовании БЕМ-нотации, обязательна и полезно.
Класс компонента определяет его как Блок, класс передаваемый ему из-вне — как Элемент.
Их свойства не пересекаются, и никогда не конфликтуют.

> react/no-array-index-key
Очень часто у «данных» нет ID. Тут поможет библиотека типа react-uid, которая превратить в key сами данные.
Как ответили выше — render prop. Точнее «renderless containers», которые предоставляют свои функции и могут быть использованы «одинаково».
Нет разницы что это Context.Consumer, React-Powerplug, VisibilitySensor или Timer — render prop унифицирует интерфейс, и задача только сделать его удобным.

Я для «удобства» использую react-gearbox.
recompose — удивительная вещь
recompact — ничем не хуже
Но меня не оставляет чувство, но их время уже немного прошло.
Я работаю серьезным React програмистом в серьезной компании, а моя жена штампует лендинги на чем прийдется, в том числе и на реакте.
Так вот — настоящий фронтенд именно у нее. И жизнь веселее. И задачи более интересные, более «емкие», охватывающие просто все сферы.

Information

Rating
Does not participate
Location
Sydney, New South Wales, Австралия
Date of birth
Registered
Activity