Вы, кажется, слишком усложняете свою проблему.В реакции мы используем композицию для разрушения элементов, что облегчает управление состоянием отдельных компонентов.Хорошее практическое правило заключается в том, что если вы визуализируете несколько компонентов, каждый из которых требует своего индивидуального и идентичного состояния, создайте новый компонент!
Вот пример того, как вы добились бы того, чего хотите, используя двакомпоненты:
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
comments: [
{ comm: "First Comment" },
{ comm: "Secound Comment" },
{ comm: "Next Comment" }
]
};
}
render() {
return (
<div className="comments">
<div>
{this.state.comments.map((value, key) => {
return <Comment key={key} item={value} />;
})}
</div>
</div>
);
}
}
Компонент приложения выше отображает все наши комментарии.Компонент комментариев ниже отображает каждый отдельный комментарий и управляет состоянием.
class Comment extends React.Component {
constructor(props) {
super(props);
this.state = {
editableColor: "green",
selected: false
};
}
updateReview = () => {
this.setState({ selected: true });
this.setState({ editableColor: "#ffffff" });
};
render() {
return (
<li class="comment">
<div
contentEditable
style={{ backgroundColor: this.state.editableColor }}
onClick={() => this.updateReview()}
>
{this.props.item.comm}
</div>
</li>
);
}
}
Намного проще понять, нет?
Вот CodeSandbox, выполняющий код выше: https://codesandbox.io/s/0xwqn27x40
Я рекомендую прочитать Состав против наследования на веб-сайте реагировать.Это должно помочь вам лучше понять, как мыслить в React.