Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

173
Vistas
React : trying to pass state to reset custom input child, why is it not updating?

I made a custom file input in my app. It's working like a charm but when the file is uploaded, the custom file input is still showing the name of the file, which is a problem.

I tried to pass a state from parent component in order to reset the name displayed but, for some reason, the child prop does not update with the parent state and I don't know why.

Here's the custom file input :

export default function CustomInput({
  disabler,
  setUpperLevelFile,
  previousName,
  typeOfFiles,
  lastInput,
  reset,
}) {
  const [fileUpload, setFileUpload] = useState(null);


  useEffect(() => {
    if (lastInput) {
      setUpperLevelFile && setUpperLevelFile(fileUpload, lastInput);
    } else {
      setUpperLevelFile && setUpperLevelFile(fileUpload);
    }
  }, [fileUpload]);

  useEffect(() => {
    reset && setFileUpload(null);
    console.log("custom input use effect : ", reset);
  }, [reset]);

  return (
    <label className="customInputLabel">
      <CustomButton
        buttonInnerText="browse"
      />
      <p>
        {(fileUpload &&
          `${fileUpload.name}, (${sumParser(fileUpload.size)})`) ||
          (previousName && previousName) ||
          "chose a file"}
      </p>
      <input
        type="file"
        name="realInput"
        className="innerFileInput"
        accept={typeOfFiles && typeOfFiles}
        disabled={disabler && !disabler}
        style={{ display: "none" }}
        onChange={(e) => {
          setFileUpload(e.target.files[0]);
        }}
      />
    </label>
  );
}

And here is some of the parent code :

export default function ImportFiles(props){
...
  const [resetInputs, setResetInputs] = useState(false);

const returningInputs = () => {
    let stockInputs = [];
    for (let i = 0; i < filesCounter; i++) {
      stockInputs.push(
        <CustomInput
          key={`custom input ${i}`}
          setUpperLevelFile={handlingInputChange}
          lastInput={i === filesCounter - 1}
          reset={resetInputs}
        />
      );
    }
    setFilesInputs(stockInputs);
  };

const handlingPostingFiles = () => {
    postingFiles(uploadFiles, setUploadStatus);
    setResetInputs(true);
  };

useEffect(() => {
    console.log("edit packages use effect : ", resetInputs);
  }, [resetInputs]);
...
return(
...
{filesInputs}
...
)

The console.log in parent component shows that the state is updated but the one in CustomInput doesn't trigger after first render. So it's not updated.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

After realizing the process - there should be a clean 🧼 🧽 phase:

so add this line after submitting form:

setFileUpload(null)

in the function handlingPostingFiles or postingFiles.


There is also option to hide this section with that condition: !resetInputs:

  <p>
    {((fileUpload && !resetInputs) &&
      `${fileUpload.name}, (${sumParser(fileUpload.size)})`) ||
      (previousName && previousName) ||
      "chose a file"}
  </p>
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda