Я використовую досить гарне рішення для цього в одному з моїх останніх додатків, що працює для моїх цілей, і я вважаю, що це швидше, ніж написання спеціальних функцій налаштування курсору у ванілі js (хоча, я визнаю, можливо, це не найкраща практика в більшості середовищ ..) Отже, на випадок, якщо ви все-таки зацікавлені, тут іде.
Я створюю батьківський елемент лише для того, щоб утримувати вбудовані стилі JavaScript, потім дитина з класним іменем або ідентифікатором, на який мій таблиця стилів css зав'яжеться, і напише стиль наведення в мій виділений файл css. Це працює тому, що більш деталізований дочірній елемент отримує вбудовані js стилі у спадок, але має свої стилі наведення курсору, перекриті файлом css.
Таким чином, мій фактичний файл css існує лише з метою проведення ефектів наведення, більше нічого. Це робить його досить стислим і простим в управлінні, і дозволяє мені робити важкі підйоми в моїх стильових компонентах In-line 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>
Зауважте, що в стилі "child" inline немає набору властивостей "color". Якби це було, це не спрацювало, тому що стиль вбудованої системи мав би перевагу над моєю таблицею стилів.
onMouseEnterтаonMouseLeave. Що стосується точного втілення цього - то саме від вас залежить. Щоб переглянути ваш конкретний приклад, чому б не зробити<Clickable/>обгортку aspan?