setup: Я динамически сгенерировал две независимые группы div. Первая группа элементов представляет 4 различных стиля bgcolor [с именем ArticlePreview], а вторая группа представляет 4 частичных примера ячеек в структуре, которая в конечном итоге похожа на сетку [с именем ArticleCells].
требуемый результат: когда пользователь нажимает на одну из статей, чтобы выбрать ее, он должен затем иметь возможность go и щелкнуть одну или несколько ячеек и применить тот же стиль bgcolor, что и для выбранной статьи, и если статья не выбрана, то bgcolor по умолчанию применяется как к элементу article, так и к элементам ячейки.
песочница: образец кода
образец кода:
const ArticlePreview = props => {
return (
<div className={props.class} onClick={props.onClick}>
{props.article}
</div>
);
};
const ArticleCells = props => {
return (
<div className={props.class} onClick={props.onClick}>
{props.cell}
</div>
);
};
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
selected: false,
article: "",
cell: "",
class: ""
};
}
onSelectArticle = article => {
this.setState({
selected: true,
article: article
});
};
onSelectCell = cell => {
var style = (cell.currentTarget.style.backgroundColor =
this.state.selected && this.state.cell === cell ? "bkcolor" : "default");
this.setState({
selected: true,
cell: cell,
class: { style }
});
};
render() {
let articles = ["Article 1", "Article 2", "Article 3", "Article 4"];
let cells = ["Div 1", "Div 2", "Div 3", "Div 4"];
return (
<div>
<div>
{articles.map((article, index) => (
<ArticlePreview
key={index}
class={
this.state.selected &&
this.state.article === article &&
this.state.article === articles[0]
? "bkcolorGreen"
: this.state.selected &&
this.state.article === article &&
this.state.article === articles[1]
? "bkcolorBlue"
: this.state.selected &&
this.state.article === article &&
this.state.article === articles[2]
? "bkcolorOrange"
: this.state.selected &&
this.state.article === article &&
this.state.article === articles[3]
? "bkcolorYellow"
: "default"
}
onClick={() => this.onSelectArticle(article)}
article={article}
/>
))}
</div>
<br />
<div>
{cells.map((cell, index) => (
<ArticleCells
key={index}
class={this.state.class}
onClick={cell => this.onSelectCell(cell)}
cell={cell}
/>
))}
</div>
</div>
);
}
}