Search code examples
javascriptvue.jsaxiosvue-componentvuex

How can I pass query parameters optional using axios in vue?


I try like this :

const actions = {
    getData ({ commit }, payload) {
      const params = {}
      if(payload) {
        if (payload.dateFrom) { params.date_from = payload.dateFrom }
        if (payload.dateTo) { params.date_to = payload.dateTo}
      }
      axios
        .get(`${api}/reports/list`, {params})
        .then(r => r.data)
        .then(res => {
          console.log(res)
        })
    }
}

If I console.log(payload), the result like this :

{from: '2022-07-01', to: '2022-07-30'}

payload is optional

My code is working. But I want to know if there is a more concise way to express it.


Solution

  • You can conditional add property to object like this:

    const actions = {
      getData({ commit }, payload) {
        const params = {
          ...(payload?.dateFrom && {
            date_from: payload.dateFrom
          }),
          ...(payload?.dateTo && {
            date_to: payload.dateTo
          })
        };
        axios
          .get(`${api}/reports/list`, { params })
          .then((r) => r.data)
          .then((res) => {
            console.log(res);
          });
      }
    };