Динамическое заполнение сетки элементами (React.js)
Здравствуйте. Подскажите пожалуйста как мне решить следующую задачу. У меня есть некое количество json данных.
{
"cards": [
{ "id": "1", "content": "Lorem ipsum dolor sit amet." },
{ "id": "2", "content": "Lorem ipsum dolor sit amet." },
{ "id": "3", "content": "Lorem ipsum dolor sit amet." },
{ "id": "4", "content": "Lorem ipsum dolor sit amet." },
{ "id": "5", "content": "Lorem ipsum dolor sit amet." },
{ "id": "6", "content": "Lorem ipsum dolor sit amet." },
{ "id": "7", "content": "Lorem ipsum dolor sit amet." },
{ "id": "8", "content": "Lorem ipsum dolor sit amet." },
{ "id": "9", "content": "Lorem ipsum dolor sit amet." },
{ "id": "10", "content": "Lorem ipsum dolor sit amet." },
{ "id": "11", "content": "Lorem ipsum dolor sit amet." }
]
}
Я получаю эти данные и передаю через props в компонент. Мне бы хотелось реализовать следующую логику:
// this.cardsData, это данные
ReactDOM.render(
<NewsFeedPreviewList
list={this.cardsData}
/>,
document.querySelector('[data-dc-news-feed-preview-ref="primary-wrapper"]'));
NewsFeedPreviewList.js
class NewsFeedPreviewList extends Component {
renderNewsFeedPreview = (list) => {
let template = null;
template = list.map((item, i) => {
return (
<PlayerCardRow
key={i}
item={item}
/>
);
});
return template;
}
render() {
return (
<ul className="news-feed-preview__layout">
{ this.renderNewsFeedPreview(this.props.list) }
</ul>
);
}
}
Мне необходимо установить по следующему принципу css классы, например: у первого будет className="item__one", у второго элемента className="item__two", у третьего className="item__three", у четвертого className="item__four". Затем, у пятого className="item__one", у шестого className="item__two", у седьмого className="item__three", у восьмого className="item__four", и далее снова замкнутый цикл: у девятого будет className="item__one" и так далее. Подскажите пожалуйста как правильно реализовать этот алгоритм. |
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<div data-dc-news-feed-preview-ref="primary-wrapper"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.3.2/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.3.2/umd/react-dom.production.min.js"></script>
<script>
const { createElement, Component } = React;
class NewsFeedPreviewList extends Component {
render() {
return createElement("ul", {},
this.props.list.cards.map((item, key) =>
createElement(PlayerCardRow, { key, item, index: key })
)
);
}
}
const classNames = ["item__one", "item__two", "item__three", "item__four"];
class PlayerCardRow extends Component {
render() {
const className = classNames[this.props.index % classNames.length];
return createElement("div", { className }, `${this.props.item.id} ${className} ${this.props.item.content}`);
}
}
/* data */
const list = {
"cards": [
{ "id": "1", "content": "Lorem ipsum dolor sit amet." },
{ "id": "2", "content": "Lorem ipsum dolor sit amet." },
{ "id": "3", "content": "Lorem ipsum dolor sit amet." },
{ "id": "4", "content": "Lorem ipsum dolor sit amet." },
{ "id": "5", "content": "Lorem ipsum dolor sit amet." },
{ "id": "6", "content": "Lorem ipsum dolor sit amet." },
{ "id": "7", "content": "Lorem ipsum dolor sit amet." },
{ "id": "8", "content": "Lorem ipsum dolor sit amet." },
{ "id": "9", "content": "Lorem ipsum dolor sit amet." },
{ "id": "10", "content": "Lorem ipsum dolor sit amet." },
{ "id": "11", "content": "Lorem ipsum dolor sit amet." }
]
};
ReactDOM.render(
createElement(NewsFeedPreviewList, { list }),
document.querySelector("[data-dc-news-feed-preview-ref='primary-wrapper']")
);
</script>
</body>
</html>
|
Большое спасибо за помощь.
|
| Часовой пояс GMT +3, время: 22:03. |