#javascript #reactjs #react-native #foreach #rxjs
#javascript #reactjs #react-native #foreach #rxjs
Вопрос:
У меня есть эта функция для загрузки нескольких изображений, и она работает, теперь мне нужно показать предварительный просмотр всех изображений, выбранных пользователем. Я пытался использовать map
и forEach
пытаться перебирать и показывать изображения, но это не работает. console.log(images)
показывает URL загруженных изображений, но images.map()
или images.ForEach
выдает ошибку null. Кто-нибудь может сказать мне, что в этом не так? Я новичок в react, поэтому мне нужна помощь.
Это код:
const fileObj = [];
const imageArray = [];
const [images, setImages] = useState(null);
const uploadMultipleFiles = (e) => {
if (e.target.name === 'images') {
fileObj.push(e.target.files)
for (let i = 0; i < fileObj[0].length; i ) {
imageArray.push(URL.createObjectURL(fileObj[0][i]))
// console.log(imageArray)
}
setImages({ images: imageArray })
}
}
{console.log(images)}
<div className="form-group multi-preview">
{ {(imageArray || []).map(url => (
<img src={url} alt="" />
))}
}
</div>
<label htmlFor="images">
<input
accept="image/*"
className={classes.input}
id="images"
onChange={uploadMultipleFiles}
name="images"
type="file"
multiple
ref={register({required:true})}
/>
Images
<IconButton color="primary" component="span">
<PhotoCamera style={{fontSize:"xx-large"}} />
</IconButton>
</label>
Комментарии:
1. где
setImages
определено?2. Эй, у меня это определено так
const [images, setImages] = useState(null);
3. Это должно было быть также в коде. Я думаю, проблема в этом.
4. О .. Хорошо, спасибо, что дали мне знать. Я обновлю вопрос.
Ответ №1:
При вашем setImages({ images: imageArray })
вызове вы получите значение images
const равным:
images = {images: [...]} // [...] is the imageArray
поэтому вам нужно будет получить к нему доступ как images.images
, или, скорее, установить его как setImages(imageArray)
, который будет доступен, как вы ожидаете.
Кроме того, получите доступ к переменной состояния и используйте map
вместо forEach
, а не imageArray
. Поэтому вместо imageArray.forEach(...)
использования images.map(...)
. Map возвращает массив со значениями, возвращенными из вызовов функций. Тогда forEach
как возвращает значение undefined.
Комментарии:
1. ОК. Спасибо, я проверю это и свяжусь с вами. 🙂
Ответ №2:
{imageArray.length>0 ?
<div>
{imageArray.map((element)=>{
return(
<img src={element} alt="" />
)
})}
</div>
:null}
Надеюсь, это решит
Комментарии:
1. Привет, спасибо за ответ. Но изображение все равно не отображается.
2. можете ли вы поделиться sc imageArray в местоположении, которое мы пытаемся отобразить?
3. На самом деле я пытаюсь показать изображения после выбора файлов с помощью этой функции
uploadMultipleFiles
, а затем в процессе добавления массиваimageArray
, а затем отображения изображений из этого массива. итак, я предполагаю, что imageArray является источником. Надеюсь, это то, что вы поняли.