Когда вы передаете весь набор свойств объекта, которые соответствуют данным публикации, как набор компонентов <Post />
, вы можете преобразовать один из этих объектов и выбросить его как атрибут элемента JSX, используя общий синтаксис JavaScript ( {}
):
const Post = ({categories,title,text}) => {
const className = ['post', ...categories.map(({name}) => name)].join(' ')
return (
<div {...{className}}>
<h2>{title}</h2>
<p>{text}</p>
</div>
)
}
Вы можете найти краткую демонстрацию ниже (проверьте ее с помощью DevTools, чтобы убедиться, что все имена классов применены правильно):
//dependencies
const { render } = ReactDOM
//source data
const posts = [{id:1,title:'My awesome post title',text:'Hello this is the text',categories:[{id:1,name:'category1'},{id:2,name:'category2'}],},{id:2,title:'My post title 2',text:'Another post is here',categories:[{id:1,name:'category3',},{id:2,name:'category10'}]}]
//post component
const Post = ({categories,title,text}) => {
const className = ['post', ...categories.map(({name}) => name)].join(' ')
return (
<div {...{className}}>
<h2>{title}</h2>
<p>{text}</p>
</div>
)
}
//post feed component
const PostFeed = ({postsData}) => (
<div className="posts">
{postsData.map(({categories,title,text},key) => <Post {...{key,categories,title,text}} />)}
</div>
)
//render
render(
<PostFeed postsData={posts} />,
document.getElementById('root')
)
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.12.0/umd/react.production.min.js"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.11.0/umd/react-dom.production.min.js"></script><div id="root"></div>