Reputation: 522
I have a list of images, I want to get the name of the image that is in the zero position of the matrix.
As you can see in the image, the name is inside File. But when I try items[0].file
or items[0]['file']
the error TypeError returns: Cannot read property 'file' of undefined
My code:
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>
</>
);
}
Upvotes: 0
Views: 71
Reputation: 810
When you first initialize items, it is an empty array so trying to log items[0].file will give error. Add undefined check. Also do not return it from useEffect. Return in useEffect is used for cleanup logic.
React.useEffect(() => {
if(items[0] {
console.log(items[0]['file'])
}
}, [items]);
Upvotes: 2