Есть пара библиотек, которые вы можете использовать, но я произвольно выберу Axios
для демонстрации.Звучит хорошо, если изображения уже находятся в БД Mongo.
Ваша задача - передать фотографии с сервера клиенту, поэтому вам нужна функция, чтобы получить их по запросу.Вы также можете исследовать fetch
или request
.
Axios: https://www.npmjs.com/package/axios
В React, попробуйте что-то вроде этого
async getPhotos() {
const res = await Axios.get('/photos')
console.log('RESPONSE', res)
const photos = res.data
console.log('IMAGES', photos)
this.setState({ photos })
}
Вот более полныйпример
import React, { Component } from 'react'
import Axios from 'axios'
class List extends Component {
constructor(props) { // super props allows props to be available
super(props) // inside the constructor
this.state = {
photos : [], // Initialize empty list to assert existence as Array type
// and because we will retrieve a list of jpegs
error: '', // Initialize empty error display
}
}
componentDidMount() {
this.getPhotos() // Do network calls in componentDidMount
}
async getPhotos() {
try {
const res = await Axios.get('/photos')
console.log('RESPONSE', res)
const photos = res.data
console.log('IMAGES', photos)
this.setState({ photos, error: '' })
} catch (e) {
this.setState({ error: `BRUTAL FAILURE: ${e}` })
}
}
render() {
if (error.length) {
return (
<div>{this.state.error}</div>
)
}
if (!photos.length) {
return (
<div>No photos yet</div>
)
}
// Assuming shape { id: 0, caption: 'Cats again', src: 'http://www.com/win.jpg' }
// Make sure to include key prop when using map (for state management)
return (
<ul>
{this.state.photos.map(photo => (
<li key={photo.id} style={{ position: 'relative' }}>
<span>{photo.caption}</span>
<img src={photo.src}
<div
className="overlay"
style={{
position: 'absolute'
width: '100%',
height: '100%',
}}
/>
</li>
))}
</ul>
)
}
}
Цитирование : В React.js я должен сделать мой начальный сетевой запрос в componentWillMount или componentDidMount?
Если вы хотитеПолучите еще одну фотографию после, вы должны постараться мыслить неизменно и заменить массив this.state.photos
его дубликатом, а также новым изображением, помещенным в конец массива.Мы будем использовать оператор распространения для этого, чтобы сделать поверхностную копию существующего массива фотографий.Это позволит React различать два состояния и эффективно обновлять новую запись.
const res = await Axios.get('/photo?id=1337')
const photo = res.data
this.setState({
photos: [...photos, photo]
})
Примечание : секретный трюк состоит в том, чтобы избежать выполнения this.state.photos.push(photo)
.Вы должны поставить недопустимый знак для установки состояния, подобного этому.
В React попытайтесь найти способ получить объект или массив.Как только вы запомнили это, бросьте его в состояние Компонента.По мере того, как вы переходите в Redux, вы иногда будете хранить предметы в магазине Redux.Это слишком сложно и не нужно описывать сейчас.Фотографии будут доступны, возможно, как this.props.photos
через функцию подключения Redux.
В большинстве других случаев поле состояния Компонента является отличным местом для хранения чего-либо интересующего Компонента.
Вы можете представить его как держатель в верхней части Компонента.