4
\$\begingroup\$

I'm using Axios to fetch data from an API, and don't know if this is the best way to deal with APIs in ReactJS or not. I want to know if anyone can suggest edits or something to make the code more efficient.

api.js

import axios from 'axios';
export const APIendpoint = axios.create({
 baseURL: 'https://1eb19101-0790-406f-90e0-ee35a2ff2d1f.mock.pstmn.io',
 timeout: 2000
});

matchesAction.js

import {FETCH_MATCHES} from './actionTypes';
import {APIendpoint} from '../api/api';
export const fetchMatches = () => dispatch => {
 const matchInstance = APIendpoint.get('/matches');
 matchInstance.then(response =>
 dispatch({
 type: FETCH_MATCHES,
 payload: response.data
 })
 );
};
asked Jul 11, 2018 at 19:20
\$\endgroup\$

1 Answer 1

1
\$\begingroup\$

It can be done in many ways based on your use case & code structure, but i feel this can be optimal way of structuring.

api/services/index.js

import axios from 'axios';
export {default as MATCHES_API} from "./services/matches.js";
export const CONFIG_API = axios.create({
 baseURL: 'https://1eb19101-0790-406f-90e0-ee35a2ff2d1f.mock.pstmn.io',
 timeout: 2000
});

api/services/matches.js

import CONFIG_API from "api/services";
const ERROR_MSG = "<generic message>";
export const matches = () => {
 return CONFIG_API.get("/matches").then(res => {
 // do some operations on data - if required 
 return {success: true, data: res.payload};
 }).catch(err => {
 return {success: false, message: ERROR_MSG || err.message};
 });
};

actions/matchesAction.js

import {FETCH_MATCHES} from './actionTypes';
import {MATCHES_API} from "/api/services";
export const fetchMatches = () => dispatch => {
 matches.then((response) =>
 const {success} = response;
 if (success) {
 dispatch({ type: FETCH_MATCHES, payload});
 } else {
 dispatch({ type: FETCH_MATCHES_FAILED}); /* or show notification */ . 
 }
 );
};

Let me know if this works out.

answered Jul 15, 2018 at 14:49
\$\endgroup\$

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.