Как правильно сделать вызов GET в React, возвращающий наблюдаемое (напоминающее метод в Angular и не использующее обещания)? - PullRequest
0 голосов
/ 22 сентября 2018

В Angular я обычно подписываюсь на клиента, предоставляющего мне наблюдаемый вызов GET , поскольку Google диктует .

httpClient.get<Data>("http://blah")
  .subscribe(
    result => { ... },
    error => { ... },
    () => { ... }
  );

Я пытаюсь научиться реагировать и выполнять соответствующиеоперация.Информация, которую я нахожу, касается использования обещаний, которые я предпочитаю не использовать.Конечно, сервисы Angular не имеют своего аналога в React как таковом, но, поскольку rxjs является независимой библиотекой, я чувствую, что имеет смысл попытаться включить ее в проект React.

Как мне это сделать и что мне не хватает в поиске в поиске?

Я также смиренно обдумываю альтернативу, поскольку, поскольку React основан на другой парадигме (т.е. магазины вместо сервисов), яможет лаять очень неловкое дерево.

Ответы [ 2 ]

0 голосов
/ 22 сентября 2018

Причина, по которой Angular Http извлекает выгоду из наблюдаемых, заключается в том, что некоторые части Angular используют наблюдаемые, поэтому они могут быть эффективно составлены, например, наблюдаемая реактивная форма может быть задушена и передана в Http.Весьма распространено, что Http наблюдаемое преобразуется toPromise(), просто потому что оно полностью наблюдаемое с одним значением и может получить выгоду от async..await, будучи обещанием.

Если в проекте React интенсивно не используются наблюдаемые (например,с redux-observable) преимуществ будет намного меньше, чем в Angular.

Как уже упоминалось в другом ответе, в RxJS есть встроенный API HTTP-запросов, rxjs/ajax.Это обертка вокруг XMLHttpRequest, это означает, что она предоставляет отменяемые запросы, в отличие от некоторых основанных на обещаниях API, особенно Fetch.Он очень упрощен и не имеет функций, которые можно ожидать от Http альтернативы - перехватчиков и т. Д.

Axios обычно можно рекомендовать как независимую от фреймворка, полнофункциональную альтернативу Angular Http, основанную на обещаниях.Это было смоделировано после AngularJS $http.Обещание из него может быть преобразовано в наблюдаемое, но необходимо принять дополнительные меры для отмены запроса.

TL; DR: самая большая продажа Http состоит в том, что его наблюдаемые могут быть составлены с другими наблюдаемыми.Если их нет, преимущества гораздо менее очевидны.Обещания могут извлечь пользу из async..await синтаксического сахара, в то время как наблюдаемые должны быть преобразованы в обещания любым способом извлечь выгоду из него.

0 голосов
/ 22 сентября 2018

Просто вместо Angular httpClient вы можете использовать встроенные методы RxJS ajax:

import { ajax } from 'rxjs/ajax';

ajax.get('https://httpbin.org/get')
  .subscribe(console.log);

Демонстрационная версия: https://stackblitz.com/edit/rxjs6-demo-nsgdri?file=index.ts

...