#reactjs #amazon-web-services #amazon-s3 #state #aws-sdk
#reactjs #amazon-web-services #amazon-s3 #состояние #aws-sdk
Вопрос:
Я пытаюсь создать список всех файлов в определенном сегменте и отобразить его в пользовательском интерфейсе, я могу получить информацию, записанную в консоль, которая в настоящее время представляет собой массив из 8 объектов, причем «Ключ» является свойством имени каждого файла, например:
Проблема, с которой я сталкиваюсь, заключается в том, что когда я пытаюсь установить эти свойства «ключа» в свое состояние, чтобы иметь возможность отображать и отображать их в списке, в итоге данные выполняются в непрерывном цикле в консоли, и я не уверен, почему. Это то, что у меня есть до сих пор в моем файле:
Если я попытаюсь «Установить список файлов» в «содержимое» под журналом консоли, именно здесь начинается непрерывный цикл. Простите меня, если я делаю что-то простое, что я делаю неправильно, поскольку это все еще ново для меня, но я был бы очень признателен за любые рекомендации, заранее спасибо!
Комментарии:
1. Вы должны опубликовать свой код, а не изображение, чтобы люди могли скопировать / вставить ваш код куда-нибудь для его отладки.
2. Не могли бы вы опубликовать код, в котором ваш вызов listFiles ?
3. Вы правы, учтите в следующий раз, спасибо
4. Я еще не вызывал его, я пытаюсь поместить содержимое в свой массив состояний «setListFiles», который я создал вверху, но когда я это делаю, console.log (contents) входит в почти бесконечный цикл и прерывается
Ответ №1:
Бесконечный цикл, о котором я упоминал, был вызван из-за того, что я не вызывал s3.ListObjects в рамках useEffect, поэтому был вызван «setListFiles», компонент был повторно отображен, а s3.ListObjects был вызван снова с повторением цикла, поэтому я получил бесконечный цикл. Мой окончательный код для этого файла выглядит так:
import { useState, useEffect } from 'react';
import AWS from 'aws-sdk';
AWS.config.update({
accessKeyId: process.env.REACT_APP_ACCESS_ID,
secretAccessKey: process.env.REACT_APP_ACCESS_KEY,
region: process.env.REACT_APP_REGION,
});
const s3 = new AWS.S3();
const params = {
Bucket: 'elixivity-libra-lu001-companyrawdata-dev',
Delimiter: '',
Prefix: 'samplecompany/',
};
const BucketList = () => {
const [listFiles, setListFiles] = useState([]);
useEffect(() => {
s3.listObjectsV2(params, (err, data) => {
if (err) {
console.log(err, err.stack);
} else {
setListFiles(data.Contents);
console.log(data.Contents);
}
});
}, []);
return (
<div className='card'>
<div className='card-header'>SampleCompany Files</div>
<ul className='list-group'>
{listFiles amp;amp;
listFiles.map((name, index) => (
<li className='list-group-item' key={index}>
{name.Key}
</li>
))}
</ul>
</div>
);
};
export default BucketList;