TypeScript Object может быть нулевым при получении файлов из события - PullRequest
0 голосов
/ 03 мая 2020

Я пытаюсь сделать компонент ввода текста + реагировать на файл. Однако я получаю ошибку машинописного текста «Объект может быть нулевым». Я погуглил, но не смог найти решение этой проблемы. Как я могу исправить эту проблему без отключения проверки нуля машинописного текста.

Я получаю ошибки на e.target.files [0]!

Вот код ниже

import React from 'react';


    export default function ImageUpload() {
      const [selectedFile, setSelectedFile] = React.useState<File | string>('fileurl');
      const [imagePreviewUrl, setImagePreviewUrl] = React.useState<string | undefined | ArrayBuffer | null>();

      const fileChangedHandler = (e : React.ChangeEvent<HTMLInputElement>) => {
        setSelectedFile(e.target.files[0]!);

        const reader = new FileReader();

        reader.onloadend = () => {
          setImagePreviewUrl(reader.result);
        };

        reader.readAsDataURL(e.target.files[0]!);
      };

      const submit = () => {
        const fd = new FormData();

        fd.append('file', selectedFile);
      };

      let imagePreview = (<div className="previewText image-container">Please select an Image for Preview</div>);
      if (imagePreviewUrl) {
        imagePreview = (
          <div className="image-container">
            <img src={imagePreviewUrl} alt="icon" width="200" />
            {' '}
          </div>
        );
      }

      return (
        <div className="App">
          <input type="file" name="avatar" onChange={fileChangedHandler} />
          <button type="button" onClick={submit}> Upload </button>
          { imagePreview }
        </div>
      );
    }

Ответы [ 3 ]

0 голосов
/ 03 мая 2020

HTMLInputElement имеет встроенное свойство files, которое является typeof FileList | null.

files: FileList | null; 

Просто обеспечьте возможность того, что files равно null.

if (!e.target.files) return;

В начале функции.

0 голосов
/ 12 мая 2020

Ребята, это правильный способ решения этой проблемы:

            e.target.files instanceof FileList
              ? reader.readAsDataURL(e.target.files[0]) : 'handle exception'

Надеюсь, это поможет. Ура! * * 1004

0 голосов
/ 03 мая 2020

Из кода я подозреваю, что e.target обнуляем. Вы можете изменить e.target.files[0]! на e.target!.files[0]!, что приведет к ошибке go, потому что вы по существу скажете компилятору Typescript, что "оно не будет нулевым, поверьте мне". Но вместо этого я бы посоветовал правильно обрабатывать нулевой регистр - проверьте наличие нулевого или неопределенного и сделайте что-нибудь подходящее, в зависимости от логики вашего приложения c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...