开发者问题收集

ReactJS-从数组中获取值

2020-07-28
69

我有一个图像列表,我想获取位于矩阵零位置的图像的名称。

在此处输入图像描述

正如您在图像中看到的那样,名称位于文件中。但是当我尝试 items[0].fileitems[0]['file'] 时,错误 TypeError 返回:无法读取未定义的属性“file”

我的代码:

export function Multiple() {

    const handleChange = files => {
      files.map(file => {
        setItems(item => [
          ...item,
          {
            file,
            onRemove: handleOnRemove,
            onClick: handleOnClick
          }
        ]);
      });
    };
  
    const handleOnRemove = file => {
      setItems(item => [...item.filter(item => item.file.name !== file.name)]);
    };
  
    const handleOnClick = file => {
      getBase64(file)
      setNameImage(file.name)
      setIsOpen(true)
    };
  
    const [items, setItems] = React.useState([]);
    const [isOpen, setIsOpen] = React.useState(false);
    const [nameImage, setNameImage] = React.useState('');
    const [codeImage, setCodeImage] = React.useState('');
  
    function getBase64(file) {
      var reader = new FileReader();
      reader.readAsDataURL(file);
      reader.onload = function () {
        setCodeImage(reader.result)
      };
      reader.onerror = function (error) {
        console.log('Error: ', error);
      };
    }
  
    React.useEffect(() => {
      return console.log(items[0]['file'])
    }, [items]);
  
  
    return (
      <>
        <File
          name="image"
          label="Upload de imagens"
          onChange={handleChange}
          required={true}
          multiple={true}
        >
          {items.map((item, index) => (
            <File.Item {...item} key={index} />
          ))}
        </File>
  
        <Modal
          title={nameImage}
          onClose={() => setIsOpen(false)}
          show={isOpen}
        >
          <img src={codeImage} alt='Imagem' className='image' />
        </Modal>
      </>
    );
  }
1个回答

首次初始化 items 时,它是一个空数组,因此尝试记录 items[0].file 会出错。添加未定义检查。另外,不要从 useEffect 返回它。 useEffect 中的返回用于清理逻辑。

React.useEffect(() => {
 if(items[0] {
  console.log(items[0]['file'])
 }

}, [items]);
Çağatay Sel
2020-07-28