Como usar Axios no React





Neste artigo, você aprenderá a usar a biblioteca Axios no React.



Vamos olhar tudo usando o exemplo de requisições ao servidor, exibir os dados recebidos em uma tabela, passar o componente de verificação de carga e tudo isso usando React Hooks.



O que é Axios?



Axios é um dos clientes HTTP mais populares para navegadores e node.js. baseado em promessas.



O Axios possui suporte para requisições, recebendo respostas do servidor, transformando-as e convertendo-as automaticamente para JSON.



Antes de começar, vamos criar um novo projeto React:



npx create-react-app react-axios-table


Vamos entrar nisso:



cd react-axios-table


Dados do projeto



Usaremos uma série de objetos como dados para nosso projeto:



[
	{
		id: 101,
		firstName: 'Sue',
		lastName: 'Corson',
		email: 'DWhalley@in.gov',
		phone: '(612)211-6296',
		address: {
			streetAddress: '9792 Mattis Ct',
			city: 'Waukesha',
			state: 'WI',
			zip: '22178'
		},
		description: 'et lacus magna dolor...',
	}
]


Link para dados



Configurando um componente para funcionar com Axios



Carregue a biblioteca Axios:



npm i axios


Importamos axios para o componente a partir do qual enviaremos solicitações ao servidor:



import axios from 'axios'


Porque no projeto, usamos React Hooks, importamos useState e useEffect (leia mais sobre ganchos no react aqui ):



import React, { useEffect, useState } from 'react';


Em seguida, adicione o seguinte código ao componente:



function App() {
  
  const [appState, setAppState] = useState();
  
  useEffect(() => {
    const apiUrl = 'http://www.filltext.com/?rows=32&id={number|1000}&firstName={firstName}&lastName={lastName}&email={email}&phone={phone|(xxx)xxx-xx-xx}&address={addressObject}&description={lorem|32}';
    axios.get(apiUrl).then((resp) => {
      const allPersons = resp.data;
      setAppState(allPersons);
    });
  }, [setAppState]);

 
  return (
    <div className="app">
    
    </div>
  );
}

export default App;


Vamos dar uma olhada no código:



const [appState, setAppState] = useState();


Responsável pelo estado do estado no componente:



 useEffect(() => {}, [setAppState])


useEffect monitorará as alterações de setAppState e renderizará novamente, se necessário



 const apiUrl=''


nós substituímos nosso link aqui



axios.get(apiUrl).then((resp) => {
      const allPersons = resp.data;
      setAppState(allPersons);
    });


envie uma solicitação get para o servidor e salve os dados JSON recebidos no estado



Baixar componente de verificação



Crie uma pasta de componentes em src . Nele, crie o componente UserData.js e adicione o seguinte código:

function UserData(props) {

    const { persons } = props

    if (!persons || persons.length === 0) return <p> .</p>

    return (
        <div>
            <table>
                <thead>
                    <tr>
                        <th>id</th>
                        <th>firstName</th>
                        <th>lastName</th>
                        <th>email</th>
                        <th>phone</th>
                    </tr>
                </thead>
                <tbody>
                    {
                        persons.map((person) =>
                            <tr key={person.id}>
                                <td>{person.id}</td>
                                <td>{person.firstName}</td>
                                <td>{person.lastName}</td>
                                <td>{person.email}</td>
                                <td>{person.phone}</td>
                            </tr>
                        )
                    }
                </tbody>
            </table>
      </div>
    )
}

export default UserData


Vamos transferir os dados recebidos do servidor para os adereços do componente.



 if (!persons || persons.length === 0) return <p> .</p>


verifique se há dados do servidor



{
                        persons.map((person) =>
                            <tr key={person.id}>
                                <td>{person.id}</td>
                                <td>{person.firstName}</td>
                                <td>{person.lastName}</td>
                                <td>{person.email}</td>
                                <td>{person.phone}</td>
                            </tr>
                        )
                    }


Usando o método map , percorremos o array com as pessoas, criamos uma string para cada pessoa. Não se esqueça da chave .



Na pasta de componentes , crie LoadingPersonsData.js e cole o seguinte código:



function OnLoadingUserData(Component) {
    return function LoadingPersonsData({ isLoading, ...props }) {
        if (!isLoading) return <Component {...props} />

        else return (
            <div>
                <h1>,  !</h1>
            </div>
        )
    }
}

export default LoadingPersonsData


O código acima é um componente de ordem superior no React. Ele pega outro componente como suporte e, em seguida, retorna alguma lógica. Em nosso caso, o componente verifica o isLoading . Enquanto os dados estão carregando, exibimos a mensagem de carregamento, assim que isLoading for false, retornamos o componente com os dados.



Vamos fazer alterações em nosso App.js para poder verificar o carregamento de dados. Vamos



importar nossos componentes para App.js :



import UserData from './components/UserData'
import OnLoadingUserData from './components/OnLoadingUserData'


Adicione o seguinte código:



function App() {

  const DataLoading =  LoadingPersonsData(UserData);

  const [appState, setAppState] = useState(
    {
      loading: false,
      persons: null,
    }
  )

 useEffect(() => {
    setAppState({loading: true})
    const apiUrl = 'http://www.filltext.com/?rows=32&id={number|1000}&firstName={firstName}&lastName={lastName}&email={email}&phone={phone|(xxx)xxx-xx-xx}&address={addressObject}&description={lorem|32}';
    axios.get(apiUrl).then((resp) => {
      const allPersons = resp.data;
      setAppState({
      loading: false,
      persons: allPersons
       });
    });
  }, [setAppState]);


  return (
    <div className="app">
        <DataLoading isLoading={appState.loading} persons={appState.persons} />
    </div>
  );
}

export default App;


 const DataLoading =  LoadingPersonsData(UserData);


Nós criamos um novo componente, o igualamos ao nosso componente de ordem superior e envolvemos um UserData (componente de exibição de dados) com ele.



Adicionamos uma nova propriedade de carregamento: false ao estado , pelo qual determinaremos o carregamento de dados do servidor.



<DataLoading isLoading={appState.loading} persons={appState.persons} />


Renderize o componente e passe os adereços para o nosso componente de ordem superior.



Vamos adicionar alguns css e ao carregar os dados veremos a seguinte janela:



imagem



E agora, quando a requisição get para o servidor for completada com sucesso, os dados são recebidos:



imagem



Agora sabemos como usar o get Axios com a API REST.



Se você tiver dúvidas ou sugestões, deixe-as nos comentários. Terei todo o prazer em responder.



All Articles