У меня есть панель навигации сбоку моей страницы. Я получил его через веб-сайт начальной загрузки, поэтому имена классов и т. д. Предварительно загружены. Вместо того, чтобы переключать логотип гамбургера, чтобы развернуть/свернуть навигацию, я хочу сделать это при входе/выходе мыши. Ниже приведена моя попытка: я сделал 2 обработчика как для входа, так и для выхода из мыши, и я использовал элемент проверки, поэтому перечислите имена классов для навигации, когда она развернута и свернута.
Затем я попытался дать навигации эти имена классов в зависимости от того, находится ли мышь в навигации или вне ее, но это не работает: (помогите, пожалуйста
class App extends Component {
render() {
let sideNav;
const mouseEnter = e => {
sideNav = "sideNav sidenav---sidenav---_2tBP sidenav---expanded---1KdUL";
console.info("Mouse entered");
return sideNav;
}
const mouseLeave = e => {
sideNav = "sidenav---sidenav---_2tBP sidenav---collapsed---LQDEv";
console.info("mouse left");
return sideNav;
}
return (
<div className = "App container">
<div>
<SideNav
onMouseEnter = {mouseEnter}
onMouseLeave = {mouseLeave}
className = {this.sideNav}
onSelect = {(selected) => {
// Add your code here
}}
>
<SideNav.Toggle />
<SideNav.Nav defaultSelected = "home">
<NavItem eventKey = "home">
<NavIcon>
<Link to = "/"><img src = {Dash}/></Link>
</NavIcon>
<NavText>
<Link to = "/">Dashboard</Link>
</NavText>
</NavItem>
<NavItem eventKey = "sites">
<NavIcon>
<Link to = "/sites"><img src = {Site} /></Link>
</NavIcon>
<NavText>
<Link to = "/sites">Sites</Link>
</NavText>
</NavItem>
<NavItem eventKey = "tours">
<NavIcon>
<Link to = "/tours"><img src = {Tour}/></Link>
</NavIcon>
<NavText>
<Link to = "/tours">Tours</Link>
</NavText>
</NavItem>
<NavItem eventKey = "media">
<NavIcon>
<Link to = "/media"><img src = {Media}/> </Link>
</NavIcon>
<NavText>
<Link to = "/media">Media</Link>
</NavText>
</NavItem>
<NavItem eventKey = "newSite">
<NavIcon>
<Link to = "/newSite/details"><img src = {NewSite} /></Link>
</NavIcon>
<NavText>
<Link to = "/newSite/details">Add new Site</Link>
</NavText>
</NavItem>
<NavItem eventKey = "profile">
<NavIcon>
<Link to = "/profile"><img src = {Profile} /></Link>
</NavIcon>
<NavText>
<Link to = "/profile">Profile</Link>
</NavText>
</NavItem>
</SideNav.Nav>
</SideNav>
</div>
<Routes />
</div>
);
}
}
export default App;
Вы создаете свои функции внутри функции рендеринга. Это означает, что они будут переопределяться при каждом рендеринге.
@luissmg Я не уверен, как бы я это сделал, извините
Где вы хотите переключить класс (точный элемент) и какую библиотеку вы используете для SideNav



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я думаю, вы должны использовать sideNav в состоянии вашего компонента, так как это способ реагирования на повторную визуализацию элемента. Каждый раз, когда вы используете setSate, реагируйте на изменения в коде, чтобы показать, что вы хотите. Когда вы просто обновляете свою переменную, реакция этого не знает. Таким образом, ваш код, вероятно, будет работать, если вы сделаете это:
class App extends Component {
constructor(){
super();
this.state = {
sideNav: ''
}
}
const mouseEnter = e => {
this.setState({sideNav: "sideNav sidenav---sidenav---_2tBP sidenav---expanded---1KdUL"});
console.info("Mouse entered");
}
const mouseLeave = e => {
this.setState({sideNav: "sidenav---sidenav---_2tBP sidenav---collapsed---LQDEv"});
console.info("mouse left");
}
render() {
return (
<div className = "App container">
<div>
<SideNav
onMouseEnter = {mouseEnter}
onMouseLeave = {mouseLeave}
className = {this.state.sideNav}
onSelect = {(selected) => {
// Add your code here
}}
>
<SideNav.Toggle />
<SideNav.Nav defaultSelected = "home">
<NavItem eventKey = "home">
<NavIcon>
<Link to = "/"><img src = {Dash}/></Link>
</NavIcon>
<NavText>
<Link to = "/">Dashboard</Link>
</NavText>
</NavItem>
<NavItem eventKey = "sites">
<NavIcon>
<Link to = "/sites"><img src = {Site} /></Link>
</NavIcon>
<NavText>
<Link to = "/sites">Sites</Link>
</NavText>
</NavItem>
<NavItem eventKey = "tours">
<NavIcon>
<Link to = "/tours"><img src = {Tour}/></Link>
</NavIcon>
<NavText>
<Link to = "/tours">Tours</Link>
</NavText>
</NavItem>
<NavItem eventKey = "media">
<NavIcon>
<Link to = "/media"><img src = {Media}/> </Link>
</NavIcon>
<NavText>
<Link to = "/media">Media</Link>
</NavText>
</NavItem>
<NavItem eventKey = "newSite">
<NavIcon>
<Link to = "/newSite/details"><img src = {NewSite} /></Link>
</NavIcon>
<NavText>
<Link to = "/newSite/details">Add new Site</Link>
</NavText>
</NavItem>
<NavItem eventKey = "profile">
<NavIcon>
<Link to = "/profile"><img src = {Profile} /></Link>
</NavIcon>
<NavText>
<Link to = "/profile">Profile</Link>
</NavText>
</NavItem>
</SideNav.Nav>
</SideNav>
</div>
<Routes />
</div>
);
}
}
export default App;
Кроме того, вы можете увидеть здесь, как это работает https://reactjs.org/docs/state-and-lifecycle.html
Именно это я и написал в комментариях :)
@luissmg Ты должен был ответить! :)
Я думаю, вы почти закончили. Я думаю, вы должны установить класс в состоянии и использовать состояние для обновления класса в
SideNavили там, где вам нужно его использовать.