Я использую для этой цели довольно однозначное решение в одном из моих недавних приложений, которое работает для моих целей, и я нахожу это быстрее, чем написание пользовательских функций настройки наведения в vanilla js (хотя, я признаю, может быть, не самая лучшая практика в большинстве сред ..) Итак, если вы все еще заинтересованы, здесь идет.
Я создаю родительский элемент только для хранения встроенных стилей javascript, затем дочерний элемент с className или id, к которому привязывается моя таблица стилей css и записывает стиль наведения в моем выделенном файле css. Это работает, потому что более детальный дочерний элемент получает встроенные js-стили через наследование, но его стили при наведении мыши переопределяются файлом css.
В общем, мой настоящий css-файл существует с единственной целью - удерживать эффекты при наведении, и ничего более. Это делает его довольно лаконичным и простым в управлении, и позволяет мне выполнять тяжелую работу в моих встроенных стилях компонентов React.
Вот пример:
const styles = {
container: {
height: '3em',
backgroundColor: 'white',
display: 'flex',
flexDirection: 'row',
alignItems: 'stretch',
justifyContent: 'flex-start',
borderBottom: '1px solid gainsboro',
},
parent: {
display: 'flex',
flex: 1,
flexDirection: 'row',
alignItems: 'stretch',
justifyContent: 'flex-start',
color: 'darkgrey',
},
child: {
width: '6em',
textAlign: 'center',
verticalAlign: 'middle',
lineHeight: '3em',
},
};
var NavBar = (props) => {
const menuOptions = ['home', 'blog', 'projects', 'about'];
return (
<div style={styles.container}>
<div style={styles.parent}>
{menuOptions.map((page) => <div className={'navBarOption'} style={styles.child} key={page}>{page}</div> )}
</div>
</div>
);
};
ReactDOM.render(
<NavBar/>,
document.getElementById('app')
);
.navBarOption:hover {
color: black;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="app"></div>
Обратите внимание, что встроенный стиль дочернего элемента не имеет установленного свойства color. Если это так, это не сработает, потому что встроенный стиль будет иметь приоритет над моей таблицей стилей.
onMouseEnter
иonMouseLeave
. Относительно точной реализации этого - это полностью зависит от вас. Чтобы посмотреть на ваш конкретный пример, почему бы не сделать<Clickable/>
оберткуspan
?