'URLSearchParams with axios instance in react-native

I was attempting to send payload, and URLSearchParams through an API URL from my react-native application. I initialized an axios instance as,

import { BASE_URL } from '../../utils/constants';
const axios = require('axios');

const api = axios.create({
    baseURL: BASE_URL,
    timeout: REQUEST_TIMEOUT,
    headers: {
        'content-type': 'application/json',
    },
});

And from another component, I imported the axios instance, then,

 import api from "../../utils/api"
 import { API_URL } from '../../utils/constants';

 requestAPI(userId, sessionId){
    let data = { "userId": userId, "sessionId": sessionId };
    
    api
      .post(API_URL, data)
      .then(response => {
        // handle the response
        // do stuffs
   })
}

The payload contains the request body for the API. As stated in API docs, I have to send the filters through URLSearchParams, like,

 api
   .post(API_URL?status=success&type=out, data)
   .then(response => .... {
       //handle the response and stuffs
   });

Any suggestions on how to send the URLSearchParams without hardcoding or just appending search queries to the API_URL? TIA.



Solution 1:[1]

Use a new URL() and assign the URLSearchParams() to the search property of the URL object.

You can then pass that object directly to axios

const API_URL ='https://httpbin.org/get',
      REQ_URL = new URL(API_URL);
      
const data = Object.entries({'foo':'bar', age:23}),      
      params = new URLSearchParams(data);
      
// to manually add params      
params.append('username', 'foobar');      
      
REQ_URL.search = params;


// example passing url object to fetch()
(async ()=>{
   console.log('REQ_URL :', REQ_URL)
   const req= await fetch(REQ_URL);
   const {args, url} = await req.json();
   console.log('URL from response:',url)
   console.log(args)
})()

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1