Π ΡƒΠ±Ρ€ΠΈΠΊΠΈ
Π‘Π΅Π· Ρ€ΡƒΠ±Ρ€ΠΈΠΊΠΈ

🐢 Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π΅Π°Π³ΠΈΡ€ΡƒΠ΅Ρ‚! ЭкспСримСнт RX + JSX

Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ постС Π½Π° Recks ΠΌΡ‹ использовали Axios ΠΎΠ±Π΅Ρ‰Π°Π΅Ρ‚ Π·Π°ΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ API GitHUB: Import Axios ΠΈΠ· Β«Axios … ΠŸΠΎΠΌΠ΅Ρ‡Π΅Π½ΠΎ RXJS, JavaScript, Rect, WebDev.

Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ постС Π½Π° Π Π΅ΠΊΠ²ΠΈΠ·ΠΈΡ‚ ΠœΡ‹ ΠŸΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½Π½Ρ‹Π΅ аксио ΠΎΠ±Π΅Ρ‰Π°Π΅Ρ‚ Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ API GitHub:

import axios from 'axios';

function App() {
  const url = 'https://api.github.com/repos/axios/axios';

  return 

Axios

{ axios.get(url).then(response => response.data.description) }

}

Π’ этом постС ΠΌΡ‹ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΠΌ нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ UX ΠΏΠΎ:

  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ
  • ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ошибки, Ссли Ρ‚Π°ΠΊΠΎΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ мСсто
  • ΠΈ ΠΌΡ‹ ΠΈΠ·Π±Π΅Π³Π°Π΅ΠΌ мСрцания Π½Π° быстрых соСдинСниях

ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ°

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΈΠ· Π½Π° основС ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠΉ Axios ΠΊ Π½Π°Π±Π»ΡŽΠ΄Π°Π΅ΠΌΡ‹ΠΌ Π½Π° основС аксСс-Π½Π°Π±Π»ΡŽΠ΄Π°Π΅ΠΌΡ‹ΠΉ (ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠ° Π²ΠΎΠΊΡ€ΡƒΠ³ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ):

import axiosObservable from 'axios-observable';

function App() {
  const url = 'https://api.github.com/repos/ReactiveX/rxjs';

  return 

RxJS

{ axiosObservable.get(url).pipe( map(response => response.data.description) ) }

}

ПовСдСниС остаСтся ΠΏΡ€Π΅ΠΆΠ½ΠΈΠΌ: Ρ‡Ρ‚ΠΎ .then Π‘Π΄Π΅Π»Π°Π» Π² обСщаниях, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ обрабатываСтся RXJS ΠΊΠ°Ρ€Ρ‚Π° .

Π‘ Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚Π΅Π»ΡΠΌΠΈ, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΌΠΈ Π½Π°ΡˆΡƒ ΠΌΠΎΡ‰ΡŒ, ΠΌΡ‹ Π΄ΠΎΠ±Ρ€Ρ‹ ΠΊ созданию чудСс!

N.B.: Π—Π΄Π΅ΡΡŒ Π΅ΡΡ‚ΡŒ скрытая Π²Ρ‹Π³ΠΎΠ΄Π° здСсь! Помимо Ρ‚ΠΎΠ½Π½ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², доступных Π² RXJS, ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΎΡ‚Π΄Π°Π²Π»Π΅Π½ΠΈΠ΅ запроса Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ООН бСсплатно!

Π˜Π½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΏΠΎΠ³Ρ€ΡƒΠ·ΠΊΠΈ

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π΄ΠΎ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΎΡ‚Π²Π΅Ρ‚Π° – Π½Π°ΠΌ просто Π½ΡƒΠΆΠ½ΠΎ сначала Π²Ρ‹Π΄Π΅Π»ΡΡ‚ΡŒ:

  startWith(Loading...)

StartWith ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ выдСляСт Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ послС этого Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒΡΡ с ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ событиями. Π’ нашСм случаС – ΠΌΡ‹ выдСляСм элСмСнт. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠΎΡ‚ΠΎΠΊΠ΅ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ Π΅Π³ΠΎ.

Π‘Π΄Π΅Π»Π°Π½Π½Ρ‹ΠΉ!

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибок

Π£Π³Π°Π΄Π°ΠΉ, Ρ‡Ρ‚ΠΎ? RX ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ для этого Ρ‚ΠΎΠΆΠ΅!

  catchError(() => of(Error!))

CatchError ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ событиС ошибки Π½Π° ΠΏΠΎΡ‚ΠΎΠΊΠ΅ с Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ. Π’ нашСм случаС – ΠΌΡ‹ выдСляСм Если ошибка Π±Ρ€ΠΎΡˆΠ΅Π½Π°.

Π‘Π΄Π΅Π»Π°Π½Π½Ρ‹ΠΉ!

Psst! Π­ΠΉ, Ρ…ΠΎΡ‡Ρƒ нСсколько ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹Ρ… ошибок? Или Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΡƒΡŽ Ρ‚Π΅Ρ…Π½ΠΈΠΊΡƒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΉ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ? ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ мою ΡΡ‚Π°Ρ‚ΡŒΡŽ ” ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибок Π² RXJS ” ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅!

ΠœΠ΅Ρ€Ρ†Π°Π½ΠΈΠ΅

Ну, это Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ слоТнСС. Нам понадобится Ρ†Π΅Π»Ρ‹Π΅ 3 строки:

zip(
  axiosObservable.request(url),
  timer(500),
  x => x
)

Zip ΠΆΠ΄Π°Ρ‚ΡŒ Axios.request ΠΈ Π’Π°ΠΉΠΌΠ΅Ρ€ (500) Оба для излучСния значСния, Π° Π·Π°Ρ‚Π΅ΠΌ создаст ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. Ρ… => Ρ… Ѐункция Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° для игнорирования значСния, испускаСмой Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠΌ, ΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚Π²Π΅Ρ‚ Axios.

ВсС вмСстС

Π”Π°Π²Π°ΠΉΡ‚Π΅ повторимся, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ написали:

function App() {
  const url = 'https://api.github.com/repos/ReactiveX/rxjs';

  return 

RxJS

{ zip( axiosObservable.get(url), timer(500), x => x ).pipe( map(response => response.data.description), startWith(Loading...), catchError(() => of(Error!)) ) }

}

Π Π°Π·Π²Π΅ это Π½Π΅ Ρ‚Π°ΠΊ просто?!

Π’ΠΎΡ‚ прСимущСства, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ достигли:

⭐️ Π˜Π½Π΄ΠΈΠΊΠ°Ρ†ΠΈΡ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибок, Π°Π½Ρ‚ΠΈ-ΠΌΠ΅Ρ€Ρ†Π°Π½ΠΈΠ΅ Ρ‡Π΅Ρ€Π΅Π· ΠΌΠΈΠ½ΡƒΡ‚Ρƒ ⭐️ УстановлСнныС обновлСния Π±Π΅Π· состояния ⭐️ АвтоматичСский запрос Аборт Π½Π° Ρ€Π°Π·ΠΌΠΎΡ€ΡŒΡ‚Π΅ ⭐️ Π‘ΠΎΠ»ΡŒΡˆΠ°Ρ Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌΠΎΡΡ‚ΡŒ с дСсятками ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² RXJS πŸš€

ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚Π΅ΡΡŒ своими мыслями Π² коммСнтариях!

ΠŸΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅ΠΊΠ²ΠΈΠ·Ρ‹ 🐢

ΠšΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ шаблон рСпозитория:

git clone --depth=1 https://github.com/recksjs/recks-starter-project.git
cd recks-starter-project
npm i
npm start

Или ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ это ΠΎΠ½Π»Π°ΠΉΠ½ пСсочница

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ доступСн Π² github.com/recksjs/recks.

ΠšΠΎΠ½Π΅Ρ†

Π€ΠΎΡ‚ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠœΠΈΡ‚Ρ‡Π΅Π»Π» ΠžΡ€Ρ€ Π½Π° БСссмыслСнно

ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π»: “https://dev.to/kosich/truly-reactive-rx-jsx-experiment-29ph”