Я бы посоветовал вам извлечь отдельные элементы в новый класс, где вы можете обрабатывать состояние наведения так, как вы хотите, вот так:
class App extends Component {
constructor(props) {
super(props);
this.state = {
isHoverStyleOn: false,
layouts: {
lg: [
{ i: "a", x: 0, y: 0, w: 1, h: 1 },
{ i: "b", x: 2, y: 0, w: 1, h: 1 },
{ i: "c", x: 2, y: 0, w: 1, h: 1 },
{ i: "d", x: 3, y: 0, w: 1, h: 1 },
{ i: "e", x: 0, y: 1, w: 1, h: 1 },
{ i: "f", x: 0, y: 1, w: 1, h: 1 }
]
}
};
}
render() {
return (
<div layouts={this.state.layouts}>
{this.state.layouts.lg.map(w => (
<Item w={w} />
))}
</div>
);
}
}
Извлеченный элемент-компонент
class Item extends Component {
state = {
active: false
};
hover = () => {
this.setState({
active: !this.state.active
});
};
render() {
const { w } = this.props;
const { active } = this.state;
return (
<div key={w.i} className={!active ? "widget" : "widget widget-hover"}>
<div className="widget-body">
<div
className="widget-bar"
onMouseEnter={() => this.hover()}
onMouseLeave={() => this.hover()}
>
<h1>test</h1>
</div>
<div className="widget-graph" />
</div>
</div>
);
}
}