Я думаю, что ты слишком обдумал это.Из того, что я вижу на примере, который вы разместили, расширенное представление продукта содержит почти те же данные, что и представление сетки.Когда пользователь нажимает на продукт, он выбирает новый путь в приложении, где представлены подробные сведения о конкретном продукте.
Существует множество способов достижения этого, и я не думаю, что вам нужноуправление состоянием, чтобы сделать это вообще.
Мой предпочтительный вариант - использовать обратный вызов в компоненте списка, который срабатывает, если пользователь нажимает на название продукта.Обратный вызов обновит состояние родительского компонента, который затем может скрыть список и представить подробный вид продукта.Каждому компоненту элемента списка может быть присвоен идентификатор продукта в качестве реквизита, который затем передается обратно в обратном вызове.Так что это может выглядеть примерно так:
For each list item:
<div class="title" onClick={productSelected(this.props.id)} > .
{this.props.productTitle}
</div>
When rendering the list:
<ul>
{ this.props.productIds.map((productId) => {
return (
<ListItem
onSelected={this.props.productSelected}
id={productId}
</ListItem>
)
{
In the parent component:
constructor(props) {
super(props)
this.state = {
selectedProductId: ""
}
this.productSelected = this.productSelected.bind(this)
}
this.productSelected(selectedProductId) {
this.setState({selectedProductId})
}
...
render() {
<div>
{ (this.state.selectedProductId !== "") ?
return ( <ListComponent
productIds={[ ... ]}
productSelected={this.productSelected}
>
)
: return ( <DetailedProductOverview
productId={this.state.selectedProductId}
>
)
}
</div>
}
....
* обратите внимание, что это не рабочий код, а скорее подсказка к решению
Так что идея заключается в том, что родительский компонент будет условноотобразить список или подробный вид в зависимости от того, имеет ли значение переменная состояния selectedProductId.
Надеюсь, это поможет.