Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

163
Views
¿Cómo usar el control giratorio y luego mostrar un componente después del botón de enviar?

Así que estoy construyendo este proyecto usando ChakraUI y ReactJS. Entonces, en este componente UploadImage, lo que quiero hacer es, cuando eliges un archivo y luego presionas el botón Cargar, el control giratorio se cargará mientras se recuperan los datos. Una vez que termine de obtener los datos, la carga será falsa y generará el componente. Pero actualmente está renderizando el componente inicialmente y después de enviar el archivo, renderiza el componente DisplayImage. Entonces, ¿cómo implementar correctamente el componente giratorio?

Mi código actual es el siguiente:

 function UploadImage() { const [selectedFile, setSelectedFile] = useState(null); const [error, setError] = useState(null); const [inputImage, setInputImage] = useState(null); const [outputImage, setOutputImage] = useState(null); const [isSubmit, setIsubmit] = useState(false); const [isLoading, setIsloading] = useState(true); const fileUploadHandler = () => { const fd = new FormData(); fd.append("file", selectedFile, selectedFile.name); axios .post(`/api/predict`, fd) .then((res) => { setIsubmit(true); setInputImage(res.data.image); setOutputImage(res.data.mask); selectedFile(null); setError(null); setIsloading(false); }) .catch((error) => { console.log(error); setSelectedFile(null); setError(error.data); }); }; const fileData = () => { if (selectedFile) { if ( selectedFile.type === "image/jpeg" || selectedFile.type === "image/png" ) { return ( <div> {error && <div>file too large!!</div>} <Button colorScheme='teal' size='sm' onClick={() => fileUploadHandler()} > Upload! </Button> </div> ); } else { return ( <div> <h4>Please choose an image to upload</h4> </div> ); } } else { return ( <div> <h4>Choose Photos</h4> </div> ); } }; return ( <div> <input type='file' onChange={(e) => setSelectedFile(e.target.files[0])} /> {fileData()} {isSubmit && isLoading === false ? ( <DisplayImage inputImage={inputImage} outputImage={outputImage} /> ) : ( <Spinner /> )} </div> ); } export default UploadImage;
about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Prueba esto:

 function UploadImage() { const [selectedFile, setSelectedFile] = useState(null); const [error, setError] = useState(null); const [inputImage, setInputImage] = useState(null); const [outputImage, setOutputImage] = useState(null); const [isLoading, setIsloading] = useState(false); const fileUploadHandler = () => { setIsloading(true); const fd = new FormData(); fd.append("file", selectedFile, selectedFile.name); axios .post(`/api/predict`, fd) .then((res) => { setInputImage(res.data.image); setOutputImage(res.data.mask); selectedFile(null); setError(null); setIsloading(false); }) .catch((error) => { console.log(error); setSelectedFile(null); setError(error.data); setIsloading(false); }); }; const fileData = () => { if (selectedFile) { if ( selectedFile.type === "image/jpeg" || selectedFile.type === "image/png" ) { return ( <div> { error ? <div>file too large!!</div> : <Button colorScheme='teal' size='sm' onClick={() => fileUploadHandler()} > Upload! </Button> } </div> ); } else { return ( <div> <h4>Please choose an image to upload</h4> </div> ); } } else { return ( <div> <h4>Choose Photos</h4> </div> ); } }; return ( <div> <input type='file' onChange={(e) => setSelectedFile(e.target.files[0])} /> {fileData()} { isLoading ? <Spinner /> : <DisplayImage inputImage={inputImage} outputImage={outputImage} /> } </div> ); } export default UploadImage;
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!