Skip to content

Homework RxJs#212

Open
andreyzagoruy-dev wants to merge 1 commit intoMastersAcademy:masterfrom
andreyzagoruy-dev:homework_rxjs
Open

Homework RxJs#212
andreyzagoruy-dev wants to merge 1 commit intoMastersAcademy:masterfrom
andreyzagoruy-dev:homework_rxjs

Conversation

@andreyzagoruy-dev
Copy link
Copy Markdown
Contributor

@TArch64
Copy link
Copy Markdown
Contributor

TArch64 commented Feb 25, 2020

Однією з хороший якостей фронтенд розробника є не тягнути бібліотеки в проект, якщо в них немає реальної необхідності. У тебе тут цілий білд ангуляра тільки для того щоб показати пару рядків тексту на сторінці. Зроби це все без ангуляра. Все що тут потрібно це тільки rxjs і 20 рядків коду, якщо не менше

@TArch64
Copy link
Copy Markdown
Contributor

TArch64 commented Feb 25, 2020

сюди навіть вебпака не потрібно. Ціль даної домашки просто навчитись працювати з лібою rxjs без прив'язки до ангуляра, бо це просто ліба, яку ангуляр використовує, а не щось особливе ангуляра

@TArch64 TArch64 self-assigned this Feb 25, 2020
@andreyzagoruy-dev
Copy link
Copy Markdown
Contributor Author

andreyzagoruy-dev commented Feb 25, 2020

Однією з хороший якостей фронтенд розробника є не тягнути бібліотеки в проект, якщо в них немає реальної необхідності. У тебе тут цілий білд ангуляра тільки для того щоб показати пару рядків тексту на сторінці. Зроби це все без ангуляра. Все що тут потрібно це тільки rxjs і 20 рядків коду, якщо не менше

Я думав, що у нас в рамках розпочатого курсу з ангуляра тепер все йде з його використанням. Нiяким разом не пропагую iдею роздувати проекти, сам такого не люблю(в git MA я навмисно не пушу весь проект, а тiльки пару невеликих файлiв. Саме з метою не додавати лишьного). До виконання поставленого завданя з боку RxJs якiсь зауваження/покращення потрiбнi?

@andreyzagoruy-dev
Copy link
Copy Markdown
Contributor Author

andreyzagoruy-dev commented Feb 25, 2020

Також, менi цiкаво було погратися на практицi з changeDetection та деякими аспектами пов'язаними саме з ангуляром

.subscribe(this.wordHandler);
}

wordHandler(keyboardEvents: KeyboardEvent[]) {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

по факту все що тобі потрібно це поле key з івента. Оскільки івентів буде дууже багато, то краще оптимізовувати це діло і ще на самому початку відкидати непотрібні дані і працювати тільки з необхідним

Comment on lines +36 to +40
buffer(
this.keyUp$.pipe(
filter(isSpace)
)
)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

особисто мені не дуже подобаються такі конструкції.

          this.keyUp$.pipe(
            filter(isSpace)
          )

тут є логіка того як відбираються дані для буіеризації стріма. це незалежний стрім і його можна винести в окрему змінну наверху з своєю назвою. Так буде зрозуміліше з першого погляду що цей стрім робить і не буде в коді ялиночок з дужок

return event.code === 'Space';
}

function not(fn) {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

якщо все пишеш на ts то типізація має бути скрізь. на всіх аргументах і типи які функції повертає

.cursor {
display: inline-block;
transform: translateY(-2px);
margin-left: -2px;
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

щоб не гратись з розміщенням тексту можна для дівайдерів (в даному випадку це вертикальний дівайдер) використовувати бордер.

Comment on lines +14 to +15
if (!changes.word.currentValue) return;
this.text += this.word + ' ';
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ченж детекшин для такого прям слішком. просто закинь новий https://developer.mozilla.org/en-US/docs/Web/API/Document/createTextNode в дом і забудь про нього. і не потрібно нічякого ченж детекшина і перевірок, і не буде з часом кілометрової стрінги в пам'яті

}

function isSpace(event: KeyboardEvent) {
return event.code === 'Space';
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

можна перевіряти по event.key === ' ' і в тебе буде використовуватись тільки одна пропертя івента і не треба буде тягнути весь об'єкт івента через стрім

Comment on lines +47 to +50
this.currentWord = '';
keyboardEvents.forEach(({ key }) => {
this.currentWord += key;
});
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

якщо юзати потрібні методи, то код буде простішим

this.currentWord = keyboardEvents.map(event => event.key);

keyUp$: Observable<Event> = null;
keyUpSubscribtion: Subscription = null;

constructor(public cd: ChangeDetectorRef) {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

public cd: ChangeDetectorRef хорошим тоном є робити публічними тільки ті поля, які потрібно. Всі інші, особливо якщо на цьому зав'язана внутрішня реалізація класу, краще робити приватними. Там коли хтось буде використовувати цей клас, то він буде чітко розуміти що можна викристовувати, а що ні

if (!keyboardEvents.length) return;
this.currentWord = '';
keyboardEvents.forEach(({ key }) => {
this.currentWord += key;
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

    keyboardEvents.forEach(({ key }) => {
      this.currentWord += key;

А ця конструкція хіба не буде купу раз трігерити ченж детекшин ангуляра?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants