🦊 Angular Fox 🚀 — русскогорящие новости сообщества
3.97K subscribers
1.21K photos
7 videos
1.06K links
Как костыль на реактивно-лисьей тяге 🔥🦊

Нравится канал? Подпишись на меня!
👉 twitter.com/thekiba_ru
💖 twitter.com/thekiba_io
medium.com/@thekiba
github.com/thekiba

Чаты @angular_ru @angular_jobs
Download Telegram
🚀 NGXF - Non-State Management for Angular

Если еще не видели, то обязательно посмотрите этот репозиторий. В нем вы найдете множество нестандартных идей использования Angular DIrective, в частности:
Http, Socket.IO, Cookies, Ivy Hooks и многие другие.

👌 Как пример, использование Lazy Components с помощью директивы:
<ng-container *lazy="'lazy.module#LazyModule'"></ng-container>


👉 Подробности в репозитории и документации:
https://github.com/ngxf/platform
https://ngxf.gitbook.io/platform/
Alex 🦅 EagleABC: Angular, Bazel and CLI

На AngularNYC рассказали про производительность 🥬 Bazel, и планы по улучшениям. Релиз обещают в Июле.

👉 https://www.youtube.com/watch?v=fEUgZopCK8E
This media is not supported in your browser
VIEW IN TELEGRAM
Вопрос: Какой WYSIWYG Editor выбрать?
Ответ: Рекомендую посмотреть на MediumEditor.

✍️ MediumEditor — очень простой WYSIWYG Editor:
🚆 Не имеет зависимотей
🕊️ Легковестный
👷 Работает во всех браузерах

👉 https://github.com/yabwe/medium-editor

__
Так же есть множество плагинов для Картинок, Таблиц, Markdown и другого.
📚 Изучение Open Source: то, как Angular обрабатывает выражение 'foo + bar | baz'.

Front-end of a compiler
Recursive descent parsing
Visitor pattern

👉 Все это в трех TypeScript файлах
https://github.com/angular/angular/tree/master/packages/compiler/src/expression_parser
📚 Если вам понравилась прошлая статья про Bloom Filter, то обязательно почитайте о том:

🚀 Как реализован DI в Angular Ivy
🦄 И что такое NodeInjector

👉 https://blog.angularindepth.com/angular-di-getting-to-know-the-ivy-nodeinjector-33b815642a8e
📚 Для того, чтобы больше не теряться с Injector, Providers и InjectFlags в Angular, рекомендую две замечательные статьи.

🔥 Tree-shakable зависимости в Angular
https://blog.angularindepth.com/tree-shakable-dependencies-in-angular-projects-5aaa7012b9e7

🦄 Область видимости провайдеров в Angular
https://blog.angularindepth.com/a-curios-case-of-the-host-decorator-and-element-injectors-in-angular-582562abcf0a

__
Если только недавно начали знакомство с Angular, то лучше начать с официальных статей в документации:
https://angular.io/guide/dependency-injection
🦄 Virtual DOM для Angular

Очень ранняя версия, но уже можно попробовать:
@Component({ template: '' })
export class AppComponent extends Renderable {
render() {
return (<h1>Hello World!</h1>)
}
}


👉 https://github.com/trotyl/ng-vdom

___
Также если интересно как это работает, то есть замечательная статья:
https://blog.angularindepth.com/introducing-to-ng-vdom-a-new-way-to-write-angular-application-60a3be805e59
This media is not supported in your browser
VIEW IN TELEGRAM
🦄 Storybook

Если еще не пробовали Storybook, то обязательно попробуйте. Он позволит быстро структурировать отображение компонентов вашей библиотеки или приложения.

Для быстрого старта есть готовый schematics:
cd my-react-vue-angular-app
npx -p @storybook/cli sb init


👉 https://storybook.js.org/

__
Также, если не видели, то посмотрите доклад Алексея Охрименко про Storybook:
https://youtu.be/HkVcU24Opu0
This media is not supported in your browser
VIEW IN TELEGRAM
🚀 Вместе с обновлением RxJS (6.4.0) так же обновили документацию.

👏 Все примеры доступны на stackblitz
🔎 Добавили форму поиска оператора
This media is not supported in your browser
VIEW IN TELEGRAM
📚 Вы знали, что TypeScript оптимизирует использование enum, если добавить const?
👍1
📚 Вопрос: что такое share(), publish(), multicast() в RxJS?
🦊 Заваривайте кофейку, ответ будет длинным. Прежде чем переходить к следующему пункту обязательно разберитесь с предыдущим.


📢 Что такое Subject?
Простыми словами, Subject это телефон. В него можно говорить, и из него можно слушать одновременно.

Есть различные Subject: Subject, ReplaySubject, BehaviorSubject, AsyncSubject.


🏰 Что такое multicast()?
Оператор multicast() на вход принимает Subject или его фабрику. И передавая в него различные виды Subject можно получить следующие комбинации:
multicast(new Subject())
multicast(new ReplaySubject())
multicast(new BehaviorSubject())


Все это создает нам ConnectableObservable, который позволяет расшарить Subject на несколько потоков. Но у них всех будут разные стратегии работы, в зависимости от переданного Subject.


🍬 Немного сахара
Операторы publish(), publishReplay(), publishBehavior() используют mulicast() с определенным Subject:
publish()
// работает аналогично multicast(new Subject())

publishReplay()
// работает аналогично multicast(new ReplaySubject())

publishBehavior()
// работает аналонично multicast(new BehaviorSubject())



👨‍🏫 Считаем ссылки
Оператор refCount() реализует паттерн RefCount и автоматически управляет ConnectableObservable:
— если появляется подписчик, то он делает connect;
— если появляется еще один подписчик, то ничего не происходит, используется тот же connect;
— если все подписчики отпишутся, то он сделат unsubscribe от коннекта к ConnectableObservable.


🦄 Финальный босс
Остались операторы share(), shareReplay().
share()
// работает аналонично publish() + refCount()

shareReplay({ refCount: true })
// работает аналонично publishReplay() + refCount()


❤️ Теперь ты знаешь как это работает, отправь своим коллегам, пусть они тоже узнают.
🦄 Если часто просматриваете код на GitHub, то попробуйте Sourcegraph для TypeScript:
👮 Type information
👉 Go to definition
🔎 Find references

🎁 Sourcegraph: Google Chrome Extention
https://chrome.google.com/webstore/detail/sourcegraph/dgjhfomjieaadpoljlnidmbgkdffpack?hl=en
📚 Совет дня: если не получается реализовать сложную задачу, попробуйте ее скомпилировать.

👌 Visitor Pattern
https://refactoring.guru/ru/design-patterns/visitor
📚 Адаптация Clean Code для TypeScript

Особое внимание советую уделить:
🏹 Functions
🎓 Classes
🎨 Composition
🚪 Open/Closed Principle

👉 https://github.com/labs42io/clean-code-typescript
📚 Вы знали, что в Chrome Dev Tools можно копировать объекты в буфер обмена?
📚 Throttling оповещений пользователей с помощью RxJS

👉 Пример использования оператора groupBy
https://blog.angularindepth.com/throttling-notifications-from-multiple-users-with-rxjs-4d90473f34aa
🦄 Это то, что я использую для красивых скриншотов с кодом
https://carbon.now.sh
⚡️ Убедитесь, что обновили Angular CLI до версии 7.3, так как в нем добавили оптимизацию полифилов

🔸 CLI создаст два бандла с полифилами - для старых (большой) и для новых браузеров (маленький)
🔸 Пользователи новых браузеров получат меньше JS кода, а значит приложение загрузится и запустится быстрее 💨

👉 https://netbasal.com/prevent-loading-redundant-es2015-browser-polyfills-thanks-to-angular-cli-177494c5244d
🦄 Основы реактивного программирования с использованием RxJS

Что такое реактивность?
Сложно найти ответ на, казалось бы, такой распространенный термин. Если кратко: реактивность это способность реагировать на какие-либо изменения. Но о каких изменениях идет речь?

👉 https://medium.com/p/984c1a390e2d
🦄 Когда выйдет Ivy, и что нам ждать в Angular 8?

👉 https://blog.angular.io/a-plan-for-version-8-0-and-ivy-b3318dfc19f7