В основном просто делайте то, что вы заявили: установите класс на основе номера комнаты в вашем штате. setState
триггеры render()
, так что обогатите, хотя при первом рендере ничего не происходит, после того, как вы нажмете, рендеринг сработает, и мы можем просто установить этот класс на вашей карте:
render() {
return this.props.rooms.map(val => {
if (val.reserved) return null;
return <p
className={ this.state.room === val.roomNumber && `active`}
key={val.roomNubber}
onClick={() => this.handleRoomSelection(val.roomNumber)}
>{val.roomNumber}</p>;
};
}
Обратите внимание, что мыизменил key
на нечто, что однозначно идентифицирует элемент , для которого мы строим <p>
: никогда не используйте индекс массива в качестве ключа, поскольку позиция массива не идентифицирует какой-либо конкретный элемент , он только идентифицирует позицию в списке.
Также обратите внимание, что нет причин передавать больше, чем просто номер комнаты в вашем обработчике кликов, если сам обработчик заботится только о номере комнаты.