Я пытаюсь стилизовать некоторые кнопки в зависимости от того, являются ли они «активными» или нет, а также от того, надвигается ли на них мышь или нет.
Это работает до некоторой степени, однако ведет себя так, что я не до конца понимаю.
Как применить условный стиль к компоненту на основе его состояния, а также поведения пользователя?
У меня есть пример в этом SANDBOX
И здесь скопирован основной JS файл:
demo.js
import React from "react";
import PropTypes from "prop-types";
//import { makeStyles } from "@material-ui/core/styles";
import { withStyles } from "@material-ui/styles";
import { Button } from "@material-ui/core";
const useStyles = theme => ({
root: {
backgroundColor: theme.palette.secondary.paper,
width: 500
},
pageButton: {
backgroundColor: "black",
color: "blue",
width: 30,
minWidth: 20,
"&:hover": {
backgroundColor: "green"
}
},
normalButton: {
width: 30,
minWidth: 20,
backgroundColour: "red"
}
});
class Feature extends React.Component {
constructor(props) {
super(props);
this.state = { currentPage: 0 };
}
handleClick(page) {
this.setState({ currentPage: page });
}
fetchPageNumbers() {
return [1, 2, 3];
}
render() {
const classes = this.props.classes;
return (
<div className={classes.root}>
{this.fetchPageNumbers().map((page, index) => {
return (
<div>
<Button
onClick={() => this.handleClick(page)}
key={page}
className={
this.state.currentPage === page
? classes.pageButton
: classes.normalbutton
}
>
{page}
</Button>
<Button
onClick={() => {}}
key={page * 20}
className={classes.normalButton}
>
{page * 20}
</Button>
</div>
);
})}
</div>
);
}
}
Feature.propTypes = {
classes: PropTypes.object.isRequired
};
export default withStyles(useStyles)(Feature);
Есть две строки. Второй ряд прекрасно подбирает стили. Первый ряд будет придерживаться только при нажатии кнопки. Я хочу иметь возможность установить состояние в зависимости от того, активна ли текущая кнопка (ie. State == buttonNumber), а также от того, наводит ли пользователь курсор на любую из кнопок.