Axios-module: Support @vue/composition-api setup function

Created on 20 Jul 2020  路  7Comments  路  Source: nuxt-community/axios-module

What problem does this feature solve?

Don't extend context and this with $axios field

What does the proposed changes look like?

import { useAxios } from '@nuxtjs/axios';

...
setup() {
  const $axios = useAxios();

  return { $axios };
}
...

This feature request is available on Nuxt community (#c365)
pending

Most helpful comment

@crutch12 If you want to use the provide/inject methodology with Nuxt 2 you can do so with the onGlobalSetup helper.

All 7 comments

Here's a simple plugin composable you can create. The same method can be used for almost all nuxt modules

import { useContext } from "@nuxtjs/composition-api";
import { NuxtAxiosInstance } from "@nuxtjs/axios";

export function useAxios(): NuxtAxiosInstance {
  const { $axios } = useContext();

  if (!$axios) {
    // throw error, no store provided
    throw new Error("nuxt axios is not defined!");
  }
  return $axios;
}

@NickBolles it can't be used in nuxt plugins, only in setup function

And I don't like idea that we put all of our utils in context object

Actually if I use this module and your example - nothing will change. Setup function just will replace this.$axios with context.$axios which is the same object

Hi @crutch12 . At the point of time there is no plan for vue 2 composition-api support since it is experimental and migration plan for from composition-api needs nuxt3 implementation (specially for supporting hooks within plugins)

And I don't like idea that we put all of our utils in context object

Can you please explain more about this? And what would be your idea for improvement?

Hi @pi0

vue 2 composition-api has the same api as vue 3, so I suggested to add composition-api support for fast migrate to vue 3
I didn't think that it's harder than implement nuxt3 at once and add hooks support. Ok, thx.

Can you please explain more about this? And what would be your idea for improvement?

Idk. I like the idea of provide/inject, when you don't make mess inside one shared object (context or $root).
I understand that it uses shared "context" inside, but symbols solves mess problem.
And this mechanism requires to be called only inside setup function (inside vue subtree), but

supporting hooks within plugins

will solve this problem I think.

Vue hooks are only valid within setup() function immediate calls that can use vm instance. Nuxt plugins are executed before vue instance creation (see here) so exactly we need to support hooks within plugins which is unlikely to be landed on nuxt2.

There is a very experimental implementation for globalPlugin but it is not recommended to use nor can be added to axios-module release now.

BTW please be patient for proper support and meanwhile you can try migration the app (except plugins) using composable that @NickBolles suggested.

@pi0 how will it look like with nuxt3?

@crutch12 If you want to use the provide/inject methodology with Nuxt 2 you can do so with the onGlobalSetup helper.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

megapctr picture megapctr  路  5Comments

lsbyerley picture lsbyerley  路  4Comments

ealves-pt picture ealves-pt  路  3Comments

jb-alvarado picture jb-alvarado  路  3Comments

artmarydotir picture artmarydotir  路  4Comments