Я создаю приложение React, работающее с API Reddit и oAuth.
Я использую MaterialUI, и я пытаюсь использовать Компонент для построения сетки из 3 столбцов изображений, которые имеют динамически генерируемую ширину столбца.значения, макс., очевидно, составляет 3.
Первому элементу в массиве извлеченных постов изображения будет присвоена пара ключ / значение случайного числа от 1 до 3. Второму элементу будет присвоен ключ / значениепара чисел, заканчивающих строку, если значение первого элемента равно! = 3.
Затем оно начнется снова, идея состоит в том, что каждый раз, когда сетка загружается, ее первый элемент может иметь ширину 1 столбец, 2 столбца в ширину или целая строка из 3 столбцов в ширину, и алгоритм должен соответствующим образом завершить оставшуюся часть сетки, то есть все строки должны добавить до 3.
Я попытался обработать массивсообщений различными способами: от присвоения значений первым двум объектам в массиве вне цикла, затем определения «последнего сообщения» и «сообщения»перед этой переменной, чтобы попытаться найти способ сложения строк.Я попытался придумать набор правил, которые бы работали независимо от положения массива, но, похоже, не может прийти к ответу, у которого нет нескольких крайних случаев.
makeTiles() {
let posts = this.props.posts;
let postsWithCols = [];
posts[0].cols = Math.floor(Math.random() * 3 + 1);
console.log(posts[0])
postsWithCols.push(posts[0]);
let previousPost = postsWithCols[postsWithCols.length - 1];
switch(previousPost.cols) {
case 1:
console.log('is1');
posts[1].cols = Math.floor(Math.random() * 2 + 1);
postsWithCols.push(posts[1]);
break;
case 2:
console.log('is2');
posts[1].cols = 1;
postsWithCols.push(posts[1]);
break;
case 3:
console.log('is3');
posts[1].cols = Math.floor(Math.random() * 3 + 1);
postsWithCols.push(posts[1]);
break;
default:
console.log('something went wrong');
break;
}
let postBeforeThat = postsWithCols[postsWithCols.length - 2];
console.log(previousPost)
console.log(postBeforeThat)
console.log(postsWithCols)
}
render() {
this.makeTiles();
return (
<div>
open grid when i can get tileData figured out.
{/* <ImageGrid tileData={this.makeTiles()} {...this.props}/> */}
</div>
);
}
}
Единственный способ, которым у меня когда-либо была такая работа, она продолжала чередоваться между 1 и 2 после первой начальной плитки.