0.1.9 • Published 6 years ago
mapix v0.1.9
Installation
npm install mapix
Use observer+rerender to await api call promises.
Library is still in development. Documentation is in process of being created :)
Usage example:
// api-store.js (or api-store.ts)
import { createGetter } from 'mapix';
import { IProduct } from './IProduct';
import { IApiDetails } from './IApiDetails';
export class ApiStore {
// use typing for the response if you know it
apiDetails = createGetter<IApiDetails>('/api/details');
// skip typing if you don't
searchProductsBySubstring = createGetter('/api/products/search/:productName');
// note that `productName` must be used as a variable when api is called later
searchProducersBySubstring = createGetter('/api/producers/search/:producerName');
}
export const apiStore = new ApiStore();
Usage example with custom axios instance:
// api-store.js (or api-store.ts)
import { Mapix } from 'mapix';
import axios from 'axios';
import { IProduct } from './IProduct';
import { IApiDetails } from './IApiDetails';
const axiosInstance = axios.create();
const { createGetter } = new Mapix(axiosInstance);
export class ApiStore {
apiDetails = createGetter<IApiDetails>('/api/details');
searchProductsBySubstring = createGetter('/api/products/search/:productName');
searchProducersBySubstring = createGetter('/api/producers/search/:producerName');
}
export const apiStore = new ApiStore();
Calling the API:
import * as React from 'react';
import { observer } from 'mobx-react';
import { Spinner } from '../components/Spinner';
import { apiStore } from '../api-store';
@observer
export class ProductsList extends React.Component {
render() {
const { data, loading, error } =
apiStore.searchProductsBySubstring({ productName: 'my test product' });
// here's that `productName` variable from before
if (loading) {
return <Spinner />;
}
return (
<ul>
{data.map(product => (<li>{product.name}</li>))}
</ul>
);
}
}
Expiring a previously cached response:
import * as React from 'react';
import { observer } from 'mobx-react';
import { expire } from 'mapix';
import { Spinner } from '../components/Spinner';
import { apiStore } from '../api-store';
@observer
export class ProductsList extends React.Component {
handleRefresh = () => {
expire(apiStore.searchProductsBySubstring);
// expiring the data causes refetch only if a currently rendered component is using the data
expire();
// ommiting the argument expires all the data
}
render() {
const { data, loading, error } = apiStore.searchProductsBySubstring({ productName: 'my test product' });
if (loading) {
return <Spinner />;
}
return (
<div>
<ul>
{data.map(product => (<li>{product.name}</li>))}
</ul>
<button onClick={this.refreshData} />
{/* This button should be pressed after products on the backend change */}
</div>
);
}
}
0.1.9
6 years ago
0.1.8
6 years ago
0.1.7
6 years ago
0.1.6
6 years ago
0.1.5
6 years ago
0.1.4
6 years ago
0.1.3
6 years ago
0.1.2
6 years ago
0.1.1
6 years ago
0.1.0
6 years ago
0.1.0-beta3
6 years ago
0.1.0-beta2
6 years ago
0.0.17
6 years ago
0.1.0-beta1
6 years ago
0.0.16
6 years ago
0.0.14
6 years ago
0.0.13
6 years ago
0.0.12
6 years ago
0.0.11
6 years ago
0.0.10
6 years ago
0.0.9
6 years ago
0.0.8
6 years ago
0.0.7
6 years ago
0.0.6
6 years ago
0.0.5
6 years ago
0.0.4
6 years ago
0.0.3
6 years ago
0.0.2
6 years ago
0.0.1
6 years ago