Heim  >  Artikel  >  Web-Frontend  >  So senden Sie eine Axios-Anfrage in React

So senden Sie eine Axios-Anfrage in React

藏色散人
藏色散人Original
2022-12-29 09:47:152929Durchsuche

So senden Sie eine Axios-Anfrage in React: 1. Installieren Sie Axios über den Befehl „npm install axios --save“. 2. Verwenden Sie Typescript, um Axios-Abhängigkeiten in die React-Datei zu importieren (config { ... })“-Methode, um eine GET-Anfrage zu stellen.

So senden Sie eine Axios-Anfrage in React

Die Betriebsumgebung dieses Tutorials: Windows 10-System, Reaktionsversion 18.0.0, Dell G3-Computer.

Wie sende ich eine Axios-Anfrage als Reaktion?

Übliche Möglichkeiten, Axios zum Senden von Anfragen in React zu verwenden

Axios-Abhängigkeiten in React installieren und einführen

Um Axios-Anfragen in einem React-Projekt zu verwenden, müssen Sie zuerst Axios installieren:

npm install axios --save

Dann mit TypeScript importieren in der Reaktionsdatei Axios-Abhängigkeit:

import axios from 'axios';

Axios für GET-Anfrage verwenden

Es gibt zwei Möglichkeiten, GET-Anfragen in Axios zu verwenden:

  • Eine ist die Verwendung von axios.get

  • Die andere ist die Verwendung von axios( config { ... })-Methode

Verwenden Sie die axios.get-Methode

Das übliche Format für die Verwendung von gekapseltem axios.get zum Stellen von Anfragen ist wie folgt:

// Make a request for a user with a given ID
axios.get('/getUser?id=12345')
  .then(function (response) {
    // handle success
    console.log(response);
 
    // update state or do something
    this.setState({
      // ...
    })
  })
  .catch(function (error) {
    // handle error
    console.log(error);
  })
  .then(function () {
    // always executed
  });
 
// Optionally the request above could also be done as
axios.get('/getUser', {
    params: { // 这里的参数设置为URL参数(根据URL携带参数)
      id: 12345
    }
  })
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  })
  .then(function () {
    // always executed
  });  
 
// Want to use async/await? Add the `async` keyword to your outer function/method.
async function getUser() {
  try {
    const response = await axios.get('/getUser?id=12345');
    console.log(response);
  } catch (error) {
    console.error(error);
  }
}

Verwenden Sie axios(config {...} )

Verwenden Sie axios(config {...}), um eine GET-Anfrage im folgenden Format zu senden:

axios({
  method: 'get',
  url: '/getUser',
  params: {
    id: 12345,
  }
})
  .then(function (response) {
    console.log(response);
  });

Die von den oben genannten Get-Anfragen gesendeten URLs lauten wie folgt:

http:HOST_IP:XXXX/getUser?id=12345

Verwenden Sie axios für POST-Anfragen

Wie bei GET-Anfragen gibt es auch zwei Anfragemethoden, die POST verwenden.

Verwenden Sie axios.post

axios.post('/createUser', {
    firstName: 'Fred',
    lastName: 'Flintstone'
  })
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });

Verwenden Sie axios(config {...})

    // Send a POST request
    axios({
      method: 'post',
      url: '/createUser',
      data: { // 这里data中的参数为requestBody参数,服务端需要使用@RequestBody注解进行获取
        firstName: 'Fred',
        lastName: 'Flintstone'
      }
    }).then(function (response) {
      console.log(response);
    }).catch(function (error) {
      console.log(error);
    });

Es ist zu beachten, dass bei der Verwendung von axios(config {}) zum Senden von GET- oder POST-Anfragen die Parameter in der GET-Anfrage URLs sind Parameter: Die Daten in der POST-Anfrage sind der RequestBody-Parameter, der mithilfe der @RequestBody-Annotation auf der Serverseite empfangen werden muss, um ihn automatisch in das entsprechende Java-Objekt zu analysieren.

Mehrere Anfragen gleichzeitig senden

Sie können mit axios auch mehrere Anfragen gleichzeitig senden:

function getUserAccount() {
  return axios.get('/user/12345');
}
 
function getUserPermissions() {
  return axios.get('/user/12345/permissions');
}
 
axios.all([getUserAccount(), getUserPermissions()])
  .then(axios.spread(function (acct, perms) {
    // Both requests are now complete
  }));

Detaillierte Konfigurationsobjekt-Konfigurationselemente

Im Readme-Dokument von axios gibt es spezifische Konfigurationsanweisungen für das Konfigurationsobjekt, z folgt:

{
  // `url` is the server URL that will be used for the request
  url: '/user',
 
  // `method` is the request method to be used when making the request
  method: 'get', // default
 
  // `baseURL` will be prepended to `url` unless `url` is absolute.
  // It can be convenient to set `baseURL` for an instance of axios to pass relative URLs
  // to methods of that instance.
  baseURL: 'https://some-domain.com/api/',
 
  // `transformRequest` allows changes to the request data before it is sent to the server
  // This is only applicable for request methods 'PUT', 'POST', 'PATCH' and 'DELETE'
  // The last function in the array must return a string or an instance of Buffer, ArrayBuffer,
  // FormData or Stream
  // You may modify the headers object.
  transformRequest: [function (data, headers) {
    // Do whatever you want to transform the data
 
    return data;
  }],
 
  // `transformResponse` allows changes to the response data to be made before
  // it is passed to then/catch
  transformResponse: [function (data) {
    // Do whatever you want to transform the data
 
    return data;
  }],
 
  // `headers` are custom headers to be sent
  headers: {'X-Requested-With': 'XMLHttpRequest'},
 
  // `params` are the URL parameters to be sent with the request
  // Must be a plain object or a URLSearchParams object
  params: {
    ID: 12345
  },
 
  // `paramsSerializer` is an optional function in charge of serializing `params`
  // (e.g. https://www.npmjs.com/package/qs, http://api.jquery.com/jquery.param/)
  paramsSerializer: function (params) {
    return Qs.stringify(params, {arrayFormat: 'brackets'})
  },
 
  // `data` is the data to be sent as the request body
  // Only applicable for request methods 'PUT', 'POST', and 'PATCH'
  // When no `transformRequest` is set, must be of one of the following types:
  // - string, plain object, ArrayBuffer, ArrayBufferView, URLSearchParams
  // - Browser only: FormData, File, Blob
  // - Node only: Stream, Buffer
  data: {
    firstName: 'Fred'
  },
  
  // syntax alternative to send data into the body
  // method post
  // only the value is sent, not the key
  data: 'Country=Brasil&City=Belo Horizonte',
 
  // `timeout` specifies the number of milliseconds before the request times out.
  // If the request takes longer than `timeout`, the request will be aborted.
  timeout: 1000, // default is `0` (no timeout)
 
  // `withCredentials` indicates whether or not cross-site Access-Control requests
  // should be made using credentials
  withCredentials: false, // default
 
  // `adapter` allows custom handling of requests which makes testing easier.
  // Return a promise and supply a valid response (see lib/adapters/README.md).
  adapter: function (config) {
    /* ... */
  },
 
  // `auth` indicates that HTTP Basic auth should be used, and supplies credentials.
  // This will set an `Authorization` header, overwriting any existing
  // `Authorization` custom headers you have set using `headers`.
  // Please note that only HTTP Basic auth is configurable through this parameter.
  // For Bearer tokens and such, use `Authorization` custom headers instead.
  auth: {
    username: 'janedoe',
    password: 's00pers3cret'
  },
 
  // `responseType` indicates the type of data that the server will respond with
  // options are: 'arraybuffer', 'document', 'json', 'text', 'stream'
  //   browser only: 'blob'
  responseType: 'json', // default
 
  // `responseEncoding` indicates encoding to use for decoding responses
  // Note: Ignored for `responseType` of 'stream' or client-side requests
  responseEncoding: 'utf8', // default
 
  // `xsrfCookieName` is the name of the cookie to use as a value for xsrf token
  xsrfCookieName: 'XSRF-TOKEN', // default
 
  // `xsrfHeaderName` is the name of the http header that carries the xsrf token value
  xsrfHeaderName: 'X-XSRF-TOKEN', // default
 
  // `onUploadProgress` allows handling of progress events for uploads
  // browser only
  onUploadProgress: function (progressEvent) {
    // Do whatever you want with the native progress event
  },
 
  // `onDownloadProgress` allows handling of progress events for downloads
  // browser only
  onDownloadProgress: function (progressEvent) {
    // Do whatever you want with the native progress event
  },
 
  // `maxContentLength` defines the max size of the http response content in bytes allowed
  maxContentLength: 2000,
 
  // `validateStatus` defines whether to resolve or reject the promise for a given
  // HTTP response status code. If `validateStatus` returns `true` (or is set to `null`
  // or `undefined`), the promise will be resolved; otherwise, the promise will be
  // rejected.
  validateStatus: function (status) {
    return status >= 200 && status < 300; // default
  },
 
  // `maxRedirects` defines the maximum number of redirects to follow in node.js.
  // If set to 0, no redirects will be followed.
  maxRedirects: 5, // default
 
  // `socketPath` defines a UNIX Socket to be used in node.js.
  // e.g. &#39;/var/run/docker.sock&#39; to send requests to the docker daemon.
  // Only either `socketPath` or `proxy` can be specified.
  // If both are specified, `socketPath` is used.
  socketPath: null, // default
 
  // `httpAgent` and `httpsAgent` define a custom agent to be used when performing http
  // and https requests, respectively, in node.js. This allows options to be added like
  // `keepAlive` that are not enabled by default.
  httpAgent: new http.Agent({ keepAlive: true }),
  httpsAgent: new https.Agent({ keepAlive: true }),
 
  // `proxy` defines the hostname and port of the proxy server.
  // You can also define your proxy using the conventional `http_proxy` and
  // `https_proxy` environment variables. If you are using environment variables
  // for your proxy configuration, you can also define a `no_proxy` environment
  // variable as a comma-separated list of domains that should not be proxied.
  // Use `false` to disable proxies, ignoring environment variables.
  // `auth` indicates that HTTP Basic auth should be used to connect to the proxy, and
  // supplies credentials.
  // This will set an `Proxy-Authorization` header, overwriting any existing
  // `Proxy-Authorization` custom headers you have set using `headers`.
  proxy: {
    host: &#39;127.0.0.1&#39;,
    port: 9000,
    auth: {
      username: &#39;mikeymike&#39;,
      password: &#39;rapunz3l&#39;
    }
  },
 
  // `cancelToken` specifies a cancel token that can be used to cancel the request
  // (see Cancellation section below for details)
  cancelToken: new CancelToken(function (cancel) {
  })
}

Die Rückgabewertobjektantwort von Axios

Das Format des von Axios nach einer Anfrage erhaltenen Antwortobjekts ist wie folgt:

{
  // `data` is the response that was provided by the server
  data: {},
 
  // `status` is the HTTP status code from the server response
  status: 200,
 
  // `statusText` is the HTTP status message from the server response
  statusText: &#39;OK&#39;,
 
  // `headers` the HTTP headers that the server responded with
  // All header names are lower cased and can be accessed using the bracket notation.
  // Example: `response.headers[&#39;content-type&#39;]`
  headers: {},
 
  // `config` is the config that was provided to `axios` for the request
  config: {},
 
  // `request` is the request that generated this response
  // It is the last ClientRequest instance in node.js (in redirects)
  // and an XMLHttpRequest instance in the browser
  request: {}
}

Wenn Sie nach der Anfrage die then-Methode verwenden, können Sie die verschiedenen Attributwerte abrufen ​​​​des Antwortobjekts, wobei Daten die vom Server zurückgegebene Antwort sind. Objekt:

axios.get(&#39;/user/12345&#39;)
  .then(function (response) {
    console.log(response.data);
    console.log(response.status);
    console.log(response.statusText);
    console.log(response.headers);
    console.log(response.config);
  });

Globale Konfiguration von Axios

Bei Verwendung von Axios können Sie globale Einstellungen für das Axios-Objekt vornehmen. Diese Einstellung wird auf alle angewendet Axios-Anforderungen in der aktuellen Javascript-Klasse, in der sich Axios befindet, z. B. die folgenden Einstellungen:

axios.defaults.baseURL = &#39;https://api.example.com&#39;;
axios.defaults.headers.common[&#39;Authorization&#39;] = AUTH_TOKEN;
axios.defaults.headers.post[&#39;Content-Type&#39;] = &#39;application/x-www-form-urlencoded&#39;;

Einzelinstanzkonfiguration von Axios

Wenn Sie Axios nicht global festlegen müssen, können Sie bei Verwendung eines Axios-Objekts ein einzelnes Objekt festlegen. wie zum Beispiel das Folgende:

// Set config defaults when creating the instance
const instance = axios.create({
  baseURL: &#39;https://api.example.com&#39;
});
 
// Alter defaults after instance has been created
instance.defaults.headers.common[&#39;Authorization&#39;] = AUTH_TOKEN;

Verwendung des Axios-Interceptors

Der Axios-Interceptor fängt Anfragen ab und nimmt benutzerdefinierte Einstellungen vor, bevor die Anfrage gesendet oder auf die Antwort (dann-Methode) geantwortet wird lauten wie folgt:

// Add a request interceptor
axios.interceptors.request.use(function (config) {
    // Do something before request is sent
    return config;
  }, function (error) {
    // Do something with request error
    return Promise.reject(error);
  });
 
// Add a response interceptor
axios.interceptors.response.use(function (response) {
    // Any status code that lie within the range of 2xx cause this function to trigger
    // Do something with response data
    return response;
  }, function (error) {
    // Any status codes that falls outside the range of 2xx cause this function to trigger
    // Do something with response error
    return Promise.reject(error);
  });

Wenn Sie den Interceptor löschen müssen, gehen Sie wie folgt vor:

const myInterceptor = axios.interceptors.request.use(function () {/*...*/});
axios.interceptors.request.eject(myInterceptor);

Sie können den definierten Interceptor auch zur benutzerdefinierten Axios-Instanz hinzufügen:

const instance = axios.create();
instance.interceptors.request.use(function () {/*...*/});

Auf einige der oben genannten Informationen wird in der Axios-Dokumentation verwiesen. Einzelheiten finden Sie unter: https://github.com/axios/axios

Empfohlenes Lernen: „ React-Video-Tutorial

Das obige ist der detaillierte Inhalt vonSo senden Sie eine Axios-Anfrage in React. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn