Я уже задавал этот вопрос, но получил совет спросить еще раз с более подробной информацией.
У меня есть проект для загрузки данных из firebase в реагирующую таблицу, и это сделано. Отлично работает. Проблема в том, что из этой базы данных есть изображения, которые также необходимо отображать в таблице. Из первого изображения видно, как организованы данные в firebase. данные базы данных
И вот код для загрузки этих данных в реакцию:
class App extends Component {
constructor(props) {
super(props);
this.state = {
vehicles: []
};
}
componentWillMount() {
this.getvehicles();
}
getvehicles() {
let vehicles = [];
firebase
.database()
.ref(`vehicles`)
.once('value', snapshot => {
snapshot.forEach(level1 => {
level1.forEach(level2 => {
const vehicle = level2.val();
vehicle.pictures && vehicles.push(vehicle);
});
});
this.setState({
vehicles
});
});
}
На втором рисунке видно, что данные загружаются из firebase Данные загружаются из Firebase
И код рендеринга здесь:
render() {
const vehiclesColumns = [
{
columns: [
{
Header: 'Vehicle ID',
id: 'vehicleID',
accessor: d => d.vehicleID,
filterMethod: (filter, row) =>
row[filter.id].startsWith(filter.value)
},
{
Header: 'Terminal',
id: 'terminal',
accessor: d => d.terminal,
filterMethod: (filter, row) =>
row[filter.id].startsWith(filter.value)
},
{
Header: 'Time',
id: 'timestamp',
accessor: d => {
return Moment(d.timestamp)
.local()
.format('DD-MMMM-YYYY', 'at', true);
}
},
{
Header: 'User',
id: 'user',
accessor: d => d.user,
filterMethod: (filter, row) =>
row[filter.id].startsWith(filter.value)
}
]
}
];
return (
<div style = {style}>
<div>
<ReactTable
style = {{ marginLeft: '-80%', marginRight: '-80%' }}
data = {this.state.vehicles}
filterable
defaultFilterMethod = {(filter, row) =>
String(row[filter.id]) === filter.value
}
columns = {vehiclesColumns}
SubComponent = {row => {
return <div>PICTURES IN ROW</div>;
}}
/>
</div>
</div>
);
}
}
Итак, мой вопрос: кто-нибудь может мне помочь или переписать код, массив «изображений», который вы можете видеть на втором снимке экрана, визуализировать в «строке» примера «реагировать-таблица»:
SubComponent = {row => {
return <div><img src = {remoteUri} key = {vehicle.picture} /></div>;
}}
Как видно на последнем скриншоте, как быть и куда показывать "картинки" из Firebase. ДАННЫЕ РЕАКТИВНОЙ ТАБЛИЦЫ С ИЗОБРАЖЕНИЯМИ В РЯД
Решение уже найдено: Перед «рендерингом» есть метод «цепочка» для соединения всех картинок с одного автомобиля.
getvehicles() {
firebase
.database()
.ref(`pictures`)
.once('value', snapshot => {
const data = snapshot.val();
const vehicles = _.chain(data)
.values()
.groupBy('vehicleId')
.map((rows, vehicleId) => ({
vehicleId,
pictures: _.map(rows, 'remoteUri')
}))
.value();
console.info(vehicles);
this.setState({ vehicles });
});
}
На "рендере"
const storage = firebase.storage();
const storageRef = storage.ref();
<div>
{row.original.pictures.map(ref => (
<Async
promiseFn = {() => storageRef.child(ref).getDownloadURL()}
>
{({ isLoading, error, data }) => {
if (error) {
return 'FATALL ERROR';
}
if (isLoading) {
return 'Loading...';
}
if (data) {
return <img src = {data} alt = {data} key = {data} />;
}
}}
</Async>
))}
</div>
С помощью этого кода я получаю изображения в строке «Подкомпонент» в таблице React.
Кто-нибудь поможет с этим?