Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

350
Visualizações
React js setstate no funciona en la publicación de axios anidada

Estoy tratando de acceder a res.data.id desde una llamada axios.post anidada y asignarla a la variable 'activeId'. Estoy llamando a la función handleSaveAll() en un evento de clic de botón. Cuando se hace clic en el botón, cuando consuelo en 'res.data.Id', devuelve el valor correctamente, pero cuando consuelo en 'activeId', devuelve nulo, lo que significa que 'res.data.id' no se puede asignar . Solo necesito asignar el valor de 'res.data.id' a 'metricId' para poder usarlo en otro lugar en otra función como la función save2(). ¿Alguien tiene una solución? Gracias por adelantado

 const [activeId, setActiveId] = useState(null); useEffect(() => {}, [activeId]); const save1 = () => { axios.get(api1, getDefaultHeaders()) .then(() => { const data = {item1: item1,}; axios.post(api2, data, getDefaultHeaders()).then((res) => { setActiveId(res.data.id); console.log(res.data.id); // result: eg 10 }); }); }; const save2 = () => { console.log(activeId); // result: null }; const handleSaveAll = () => { save1(); save2(); console.log(activeId); // result: again its still null }; return ( <button type='submit' onClick={handleSaveAll}>Save</button> );
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Esta parte del código ejecuta sincronización

 const handleSaveAll = () => { save1(); save2(); console.log(activeId); // result: again its still null };

pero ahí ejecutas asíncrono

 axios.get(api1, getDefaultHeaders()) .then(() => {

Puede refactorizar su código para sincronizar/esperar así:

 const save1 = async () => { const response = await axios.get(api1, getDefaultHeaders()); const response2 = await axios.post(api2, { item1: response.data.item1 }, getDefaultHeaders()); return response2.data.id; }; const save2 = (activeId) => { console.log(activeId); // result: null }; const handleSaveAll = async () => { const activeId = await save1(); save2(activeId); setActiveId(activeId); console.log(activeId); // result: again its still null };

o a cadena de promesas, así:

 const save2 = (activeId) => { console.log(activeId); // result: null }; const save1 = () => { return axios.get(api1, getDefaultHeaders()) .then(({ data }) => { const data = {item1: item1,}; return axios.post(api2, {item1: data.item1}, getDefaultHeaders()) }) .then((res) => res.data.id); }; const handleSaveAll = () => { save1() .then((res) => { setActiveId(res.data.id); console.log(res.data.id); // result: eg 10 return res.data.id; }) .then(save2); };
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda