recherche

Maison  >  Questions et réponses  >  le corps du texte

Impossible de sélectionner les fichiers téléchargés pour le balisage dans React

<p>J'utilise React pour créer un téléchargement de fichier. Je souhaite que la variable d'état soit définie sur le fichier téléchargé (.docx ou .pdf) dès que le fichier est téléchargé. Mais lors de l’appel de set state, il apparaît comme indéfini. </p> <pre class="brush:php;toolbar:false;">const [selectedFile, setSelectedFile] = useState(null) <Input type="file" onChange={handleImageUpload} accept={config.type}/> const handleImageUpload = (événement : { cible : { fichiers : any[] } }) => fichier const = event.target.files[0] si (fichier) { if (file.size > config?.fileSize) { setErrorMessage(config.fileSizeError) } else if (file?.name.endsWith(config.type)) { setSelectedFile(fichier) } autre { lecteur.readAsDataURL (fichier) } } }</pré> <p>Une fois que <code>setSelectedFile(file)</code> apparaît, <code>selectedFile</code> Est-ce une raison spécifique pour laquelle cela s'est produit ? </p>
P粉312631645P粉312631645455 Il y a quelques jours458

répondre à tous(2)je répondrai

  • P粉523335026

    P粉5233350262023-08-16 14:23:10

    En effet, lorsque vous l'appelez ou le connectez à la console, votre statut n'a pas encore été mis à jour. Vous pouvez enregistrer votre statut dans un useEffecthook pour l'afficher une fois mis à jour. Voici un exemple :

    useEffect(() => {
        console.log("文件 >> ", selectedFile);
      }, [selectedFile]);

    répondre
    0
  • P粉760675452

    P粉7606754522023-08-16 14:11:16

    Je pense que votre code fonctionne comme prévu, mais lorsque vous essayez de l'appeler, l'état n'a pas encore été mis à jour.

    Selon la Documentation officielle de React :

    set函数只会更新下一次渲染的状态变量。
    如果在调用set函数之后读取状态变量,你仍然会得到在调用之前屏幕上的旧值。

    Maintenant, c'est mon hypothèse, mais vous pouvez essayer d'ajouter ce code :

    setSelectedFile(file)
    
    setTimeout(() => {
        console.log(selectedFile); 
    }, 5000);

    répondre
    0
  • Annulerrépondre