@rxx/http
Version:
Http IO module for rxx.
168 lines (116 loc) • 2.23 kB
Markdown
react-mvi StateHandler for http request.
- @react-mvi/core >= 1.0.0
```nps install @react-mvi/http```
First, register HttpHandler to @react-mvi/core handlers by __registerHandlers__.
```typescript
import {
registerHandlers
} from '@react-mvi/core';
import {
HttpHandler
} from '@react-mvi/http';
registerHandlers({
http: new HttpHandler()
})
```
`@react-mvi/http` use http property of Store returned object.
See example below.
Create request stream.
```typescript
// Send request.
class AStore extends Store<{http: {[key: string]: HttpConfig}}> {
public render() {
return {
http: {
'app::requestSubmit': this.intent.onSubmit().mapTo({...})
}
}
}
}
```
Receive response with stream.
```typescript
@intent
class Intent {
private intent: HandlerResponse;
private http: HandlerResponse;
public onSubmit() {
return this.intent.for('app::onSubmit');
}
public onSubmitResponse() {
return this.http.for('app::requestSubmit');
}
}
// In Store.
this.intent.onSubmitResponse().map(...)
```
```typescript
interface HttpConfig {
url: string;
method?: HttpMethod;
headers?: any;
mode?: 'cors'|'same-origin'|'no-cors';
json?: boolean;
data?: string|Blob|FormData,
form?: boolean;
responseType?: ResponseType
}
```
Request url.
Request method type. It defined in HttpMethods enum.
```typescript
enum HttpMethod {
GET = 1,
POST,
PUT,
DELETE
}
```
Request headers.
Fetch api mode.
Send json or not.
Request body.
Using www-form-urlencoded.
Response body type. It defined in ResponseType enum.
```typescript
enum ResponseType {
JSON = 1,
BLOB,
ARRAY_BUFFER,
FORM_DATA,
TEXT
}
```
```typescript
interface HttpResponse<T, E> {
ok: boolean;
headers: {[key: string]: string};
status: number;
response: T;
error: E;
}
```
Flag that show response was 30X or 20X.
Response headers.
Response status number.
Response body.
Error message if error occured.