Π ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΠΏΠΎΡΡΠ΅ Π½Π° Π Π΅ΠΊΠ²ΠΈΠ·ΠΈΡ ΠΡ ΠΠΎΠ΄Π΅ΡΠΆΠ°Π½Π½ΡΠ΅ Π°ΠΊΡΠΈΠΎ ΠΎΠ±Π΅ΡΠ°Π΅Ρ Π§ΡΠΎΠ±Ρ Π·Π°ΠΏΡΠΎΡΠΈΡΡ 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”