Порефакторим...
В течении всего учебника я учил вас думать о данных, а потом в CWP и gDSFR взял и сделал из образно stateless (хоть он и был через class - состояния у него не было) компонента - statefull. Это было сделано для удобства объяснений.
Смотрите, если мы откатим наш <News /> на два урока назад (когда компонент просто получал props), то мы сможем в <App /> использовать gDSFR и там "рубить спам". Таким образом, мы бы опять решили задачу без изменения stateless компонента.
Было: компонент <News /> умел отображать данные. Стало: компонент <News /> умеет отображать данные и помечать спам.
Задача: обрабатывать данные в <App />, вернуть <News /> к прежнему "тупому" образу жизни.
Подсказка: вы запросто можете сделать все что нужно в <App />, так как мы только что отработали этот прием.
Подсказка: в <App /> новости лежат в state, а не в props.
Напоминаю, как выглядел <News />:
src/components/News.js
import React from 'react'
import PropTypes from 'prop-types'
import { Article } from './Article'
class News extends React.Component {
renderNews = () => {
const { data } = this.props
let newsTemplate = null
if (data.length) {
newsTemplate = data.map(function(item) {
return <Article key={item.id} data={item} />
})
} else {
newsTemplate = <p>К сожалению новостей нет</p>
}
return newsTemplate
}
render() {
const { data } = this.props
return (
<div className="news">
{this.renderNews()}
{data.length ? (
<strong className={'news__count'}>
Всего новостей: {data.length}
</strong>
) : null}
</div>
)
}
}
News.propTypes = {
data: PropTypes.array.isRequired,
}
export { News }Решение
Полный код компонента <App />
src/App.js
Итого:
Last updated
Was this helpful?